Como dividir dados em pacotes de tamanho igual com tamanho de cabeçalho variável ..
Pergunta
Estou construindo a aplicação entre pares para pares em Python. Vai funcionar sobre o UDP. Eu tenho função chamada getHeader(packetNo,totalPackets)
que me devolve o cabeçalho para esse pacote.
O tamanho do cabeçalho não é fixo porque o comprimento consumido por diferentes dígitos é diferente, por exemplo, estou escrevendo cabeçalho para packetno = 1 como PACKET_NO=1
, seu comprimento será diferente para o packetno 10, 100, .. etc
Atualmente, não estou incluindo nenhum pacotes no cabeçalho. Estou apenas incluindo o número do pacote, quero incluí-lo, mas como posso saber nenhum dos pacotes antes do tamanho do cabeçalho da computação, pois o cabeçalho agora não deve conter pacotes e no_of_packets = --- pode ter qualquer comprimento.
Eu posso passar por alguma função que calculará os pacotes, mas isso será algo como força bruta e consumirá tempo desnecessário e poder de processamento. Existe alguma maneira inteligente de fazer isso?
Solução
Não use texto simples. Faça do cabeçalho do pacote um 4 bytes embalados (ou 8 bytes, dependendo de quantos pacotes você espera) inteiros, por exemplo,
import struct
header = struct.pack('!II', packetNo, totalPackets)
Aqui está documentação por struct
módulo.
Outras dicas
Por que não zero-pad seu número de pacotes, para que o cabeçalho fique fixo. Digamos que você queira apoiar 1 bilhão de pacotes em uma mensagem:
PACKET_NO=0000000001
tem o mesmo comprimento que:
PACKET_NO=1000000000
Obviamente, isso criará um limite superior no possível número de pacotes, mas deve haver algum Limite superior, não?