2009-09-27 3 views
0

파이썬에서 피어 투 피어 애플리케이션을 구축 중입니다. 그것은 UDP를 통해 작동합니다. 나는 그 패킷에 대한 헤더를 반환하는 getHeader(packetNo,totalPackets)이라는 함수를 가지고있다. 헤더의 크기에 따라 나는 데이터를 자르고, 헤더에 데이터를 첨부하고 동일한 패킷 크기를 얻는다.헤더 크기가 가변적 인 동일한 크기의 패킷으로 데이터를 분할하는 방법 ..

다른 자릿수에 의해 소비되는 길이가 다르기 때문에 헤더 크기가 고정되지 않습니다. packetNo = 1에 대한 헤더를 쓰고 있습니다. PACKET_NO=1, 그 길이는 packetNo 10, 100, ...과 다릅니다.

현재 헤더에 패킷이 없습니다. 나는 패킷 번호를 포함하고 싶다.하지만 그것을 포함하고 싶다. 그러나 헤더에 현재 패킷이없고 NO_OF_PACKETS = --- 길이가 될 수 있기 때문에 헤더 크기를 계산하기 전에 패킷을 알 수있는 방법은 무엇인가?

패킷을 계산하지 않는 함수를 전달할 수는 있지만 무언가와 같이 불필요한 시간과 처리 능력을 소모합니다. 그것을 할 수있는 지능적인 방법이 있습니까?

답변

2

일반 텍스트를 사용하지 마십시오. 패킷의 헤더를 정수 (예 : 몇 개의 패킷을 기대하는지에 따라 2 바이트 4 바이트 또는 8 바이트)로 만듭니다. struct 모듈

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

Here's documentation.

+0

그러나 패킷의 수를 제한합니다. – Xinus

+0

예, 64 비트 부호없는 정수는 패킷 수를 2^64, 32 비트를 2^32로 제한합니다. 그 한도에 정말로 관심이 있다면 더 큰 것을 사용하십시오 (예 : packetNo의 경우 두 개의 64 비트 단위, totalPackets의 경우 두 개, 2^128의 한계가 있음). –

+1

64 비트 값 이상은 필요하지 않습니다. 초당 백만 개의 패킷을 보내더라도 패킷 번호는 50 만 년 이상 걸릴 것입니다. 그때까지 우리 모두는 오래 전에 죽을 것이므로, 그것은 정말로 다른 누군가의 문제 일 것입니다. 그들이 연결을 다시 시작해야 할 것 같아요;) – caf

0

헤더가 고정되도록 패킷 수를 제로화하지 않는 이유는 무엇입니까? 당신이 메시지에 10 억 개 패킷을 지원하려는 말 : 거기에 물론

PACKET_NO=1000000000 

,이 패킷의 가능한 수에 상한을 만들 것이다, 그러나 :

PACKET_NO=0000000001 

은 같은 길이입니다 일부 상한, 아니?

관련 문제