Comment diviser les données en paquets de taille égale ayant une taille d'en-tête variables ..

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

  •  18-09-2019
  •  | 
  •  

Question

Je construis l'application peer to peer en python. Sa va travailler sur UDP. J'ai appelé fonction getHeader(packetNo,totalPackets) qui me retourne l'en-tête pour cette packet.Depending de la taille d'en-tête je coupais des données, attacher des données à en-tête et d'obtenir même taille de paquet.

taille d'en-tête est pas fixée, car la longueur consommée par les différents pas de chiffres est différente, par exemple Je suis en train d'écrire en-tête pour packetNo = 1 PACKET_NO=1, sa longueur sera différente pour packetNo 10, 100, etc ..

Je suis actuellement non pas, y compris des paquets en-tête. Je suis juste compris le numéro de paquet, je veux inclure, mais comment puis-je savoir pas de paquets avant de calculer la taille d'en-tête en-tête doit maintenant contenir pas de paquets et NO_OF_PACKETS = --- peut être de toute longueur.

Je peux passer à travers une fonction qui calcule pas de paquets, mais ce sera quelque chose comme la force brute et consomme la puissance du temps inutile et le traitement. Y at-il de façon intelligente de le faire?

Était-ce utile?

La solution

Ne pas utiliser de texte brut. Faire en-tête de paquet deux 4 octets emballés (ou 8 octets, selon le nombre de paquets que vous attendez) entiers, par exemple.

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

est ici la documentation pour le module struct.

Autres conseils

Pourquoi ne pas zéro-pad votre nombre de paquets, de sorte que l'en-tête se fixe. Dites que vous voulez soutenir 1 milliard de paquets dans un message:

PACKET_NO=0000000001

est la même longueur que:

PACKET_NO=1000000000

Bien sûr, cela va créer une limite supérieure sur le nombre possible de paquets, mais il doit être certains limite supérieure, non?

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