Come dividere i dati in pacchetti di dimensioni uguali aventi dimensione di intestazione variabile ..

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

  •  18-09-2019
  •  | 
  •  

Domanda

sto costruendo peer to peer applicazione in Python. La sua intenzione di lavorare su UDP. Ho funzione chiamata getHeader(packetNo,totalPackets) che mi restituisce l'intestazione per quella packet.Depending delle dimensioni dell'intestazione sto tritare dati, allegando i dati di intestazione e ottenere stessa dimensione del pacchetto.

dimensioni intestazione non è fisso perché lunghezza consumata dalla differente non di cifre è diverso esempio Scrivo di intestazione per packetNo = 1 come PACKET_NO=1, la sua lunghezza sarà diverso per packetNo 10, 100, etc ..

Al momento sto che non includono alcuna di pacchetti in intestazione. Sto solo, compreso il numero di pacchetti, voglio includere, ma come faccio a sapere non di pacchetti prima di calcolo dimensioni intestazione come intestazione dovrebbe ora non contengono dei pacchetti e NO_OF_PACKETS = --- può essere di qualsiasi lunghezza.

Posso passare attraverso qualche funzione che calcolerà non di pacchetti ma che sarà qualcosa di simile a forza bruta e consumerà tempo inutile e potenza di elaborazione. Esiste un modo intelligente per farlo?

È stato utile?

Soluzione

Non utilizzare testo semplice. Fare intestazione del pacchetto a due imballato 4 byte (o 8 byte, a seconda di quanti pacchetti che ci si aspetta) numeri interi, per esempio.

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

Ecco la documentazione per il modulo struct.

Altri suggerimenti

Perché non è zero-pad il tuo numero di pacchetti, in modo che l'intestazione diventa fisso. Dire che si desidera supportare 1 miliardi di pacchetti in un messaggio:

PACKET_NO=0000000001

è la stessa lunghezza:

PACKET_NO=1000000000

Naturalmente, questo creerà un limite superiore sul possibile numero di pacchetti, ma ci deve essere alcuni limite superiore, no?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top