Pregunta

Estoy aprendiendo programación de socket (en python) y me preguntaba cuál es la mejor / típica forma de encapsular datos. Mis paquetes se utilizarán para emitir comandos de ejecución, detención, configuración, etc. en el lado receptor. ¿Es útil usar JSON o solo texto directo?

¿Fue útil?

Solución

Le sugiero que utilice un formato fijo o mayormente fijo, ya que esto facilita las cosas.
Al utilizar funciones como la struct.Struct de la biblioteca estándar, con sus métodos pack () y umpack (), o posiblemente paquetes un poco más destacados como Construir , debe realizar gran parte del trabajo de análisis por usted ;-)

Otros consejos

Sugiero un texto plano para empezar, es más fácil de depurar. El formato que toma su texto depende de lo que esté haciendo, cuántos comandos, argumentos, etc. ¿Ha desarrollado cómo se verán sus comandos? Una vez que descubras cómo se ve, probablemente te sugiera un formato por sí solo.

¿Está utilizando TCP o UDP? TCP es fácil ya que es una secuencia, pero si está utilizando UDP tenga en cuenta el tamaño máximo de los paquetes UDP y, por lo tanto, qué tan grande puede ser su mensaje.

Si está desarrollando algo como un ejercicio de aprendizaje, puede que le resulte mejor ir con un formato de texto estructurado (es decir, legible por humanos y de escritura humana).

Un ejemplo sería utilizar un número fijo de campos por comando, campos de texto de ancho fijo y / o delimitadores de campo fácilmente analizables.

Generalmente, el texto es menos eficiente en términos de tamaño de paquete, pero tiene los beneficios de que puede leerlo fácilmente si realiza una captura de paquetes (por ejemplo, utilizando wireshark) o si desea usar telnet para imitar a un cliente.

Y si esto es solo un ejercicio de aprendizaje, la facilidad de depuración es un problema importante.

Observe cómo scapy (una impresionante biblioteca de manipulación de paquetes de Python) lo implementa Parece que tiene un puñado de campos .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top