Comment diviser les données en paquets de taille égale ayant une taille d'en-tête variables ..
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?
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?