Question

J'apprends la programmation de sockets (en python) et je me demandais quelle était la meilleure façon / typique d'encapsuler des données? Mes paquets seront utilisés pour émettre des commandes run, stop, configure, etc. du côté réception. Est-il utile d’utiliser JSON ou seulement du texte simple?

Était-ce utile?

La solution

Je vous suggère d'utiliser un format fixe, ou principalement fixe, car cela facilite les choses.
En utilisant ensuite des fonctionnalités telles que la struct.Struct de la bibliothèque standard, avec ses méthodes pack () et umpack (), ou éventuellement un paquetage légèrement plus détaillé tel que Construire , une grande partie du travail d’analyse syntaxique doit être effectuée pour vous; -)

Autres conseils

Je suggère un texte brut pour commencer - il est plus facile de déboguer. Le format de votre texte dépend de ce que vous faites, du nombre de commandes, d'arguments, etc. Avez-vous précisé le rendu de vos commandes? Une fois que vous aurez compris à quoi ça ressemble, il vous proposera probablement un format tout seul.

Utilisez-vous TCP ou UDP? Le protocole TCP est simple car il s’agit d’un flux, mais si vous utilisez UDP, gardez à l’esprit la taille maximale des paquets UDP et donc la taille de votre message.

Si vous développez quelque chose en tant qu'exercice d'apprentissage, vous trouverez peut-être mieux d'utiliser un format de texte structuré (c'est-à-dire lisible par l'homme et lisible par l'homme).

Un exemple consisterait à utiliser un nombre fixe de champs par commande, des champs de texte de largeur fixe et / ou des délimiteurs de champs facilement analysables.

Généralement, le texte est moins efficace en termes de taille de paquet, mais il présente les avantages suivants: vous pouvez le lire facilement si vous faites une capture de paquet (par exemple, avec wirehark) ou si vous souhaitez utiliser telnet pour imiter un client.

Et s’il ne s’agit que d’un exercice d’apprentissage, la facilité de débogage est un problème important.

Découvrez comment scapy (une bibliothèque de manipulation de paquets Python impressionnante) le met en œuvre. Cela ressemble à une poignée de champs .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top