가변 헤더 크기가있는 동일한 크기 패킷으로 데이터를 분할하는 방법 ..

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

  •  18-09-2019
  •  | 
  •  

문제

Python에서 Peer to Peer 응용 프로그램을 구축하고 있습니다. UDP를 통해 작동 할 것입니다. 나는 기능을 호출했다 getHeader(packetNo,totalPackets) 해당 패킷의 헤더를 반환합니다. 헤더 크기에 따라 데이터를 자르고 데이터를 헤더에 연결하고 동일한 패킷 크기를 얻습니다.

헤더 크기는 다른 숫자로 소비되는 길이가 다르기 때문에 고정되지 않았습니다. PACKET_NO=1 , 길이는 Packetno 10, 100, .. 등에 대해 다릅니다.

나는 현재 헤더에 패킷을 포함하지 않습니다. 패킷 번호를 포함하고 있습니다. 포함하고 싶습니다. 그러나 헤더에는 패킷이 포함되어 있지 않아야하므로 헤더 크기를 컴퓨팅하기 전에 패킷을 어떻게 알 수 없는가.

패킷을 계산하지는 않는 기능을 통해 전달할 수 있지만 무차별적인 힘과 같은 것이며 불필요한 시간과 처리 전력을 소비 할 수 있습니다. 그것을 할 지능적인 방법이 있습니까?

도움이 되었습니까?

해결책

일반 텍스트를 사용하지 마십시오. 패킷 헤더를 포장 된 4 바이트 (또는 예상되는 패킷 수에 따라 8 바이트) 정수로 만듭니다.

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

여기 문서가 있습니다 ~을 위한 struct 기준 치수.

다른 팁

헤더가 고정되도록 패킷 수를 제로 패드하지 않겠습니까? 메시지에서 10 억 패킷을 지원하고 싶다고 가정 해보십시오.

PACKET_NO=0000000001

길이는 다음과 같습니다.

PACKET_NO=1000000000

물론 이것은 가능한 패킷 수에 상한을 만들지 만 약간 상한, 아니요?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top