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?

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top