¿Cómo dividir los datos en paquetes de igual tamaño que tienen un tamaño variable de cabecera ..

StackOverflow https://stackoverflow.com/questions/1483243

  •  18-09-2019
  •  | 
  •  

Pregunta

Estoy construyendo aplicación peer to peer en Python. Su va a trabajar a través de UDP. Tengo función llamada getHeader(packetNo,totalPackets) que me devuelve la cabecera para que packet.Depending del tamaño de la cabecera estoy picando datos, adjuntando los datos a la cabecera y conseguir mismo tamaño del paquete.

tamaño de la cabecera no es fijo porque la longitud consumida por diferente no de dígitos es diferente, por ejemplo, Estoy escribiendo cabecera para packetNo = 1 como PACKET_NO=1, su longitud será diferente para packetNo 10, 100, etc ..

Actualmente estoy sin incluir ninguna de paquetes de cabecera. Estoy incluyendo el número de paquetes, quiero incluir, pero ¿cómo puedo saber ninguna de paquetes antes de calcular el tamaño de cabecera como cabecera debe contener ahora ninguna de paquetes y NO_OF_PACKETS = --- puede ser de cualquier longitud.

me puede pasar a través de alguna función que calcule ninguna de paquetes, sino que será algo así como la fuerza bruta y consumirá tiempo innecesario y potencia de procesamiento. ¿Hay alguna forma inteligente de hacerlo?

¿Fue útil?

Solución

No utilice texto sin formato. Hacer el encabezado del paquete de dos empaquetado 4 bytes (o de 8 bytes, dependiendo del número de paquetes que esperas) números enteros, por ejemplo.

import struct
header = struct.pack('!II', packetNo, totalPackets)

Aquí está la documentación para el módulo struct.

Otros consejos

¿Por qué no cero engrosar su número de paquetes, por lo que la cabecera se convierte en fijo. Digamos que quiere apoyar a 1 mil millones de paquetes en un mensaje:

PACKET_NO=0000000001

es la misma longitud que:

PACKET_NO=1000000000

Por supuesto, esto creará un límite superior en el número posible de paquetes, pero tiene que ser algunos límite superior, no?

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