2012-02-17 1 views
0

네트워크 메시지가 msgHdr+payload입니다. msgHdr에는 두 개의 롱과 두 개의 숏이 있습니다. 페이로드는 가변 길이 텍스트입니다. 구조체 형식을 지정하는 방법을 모르므로 압축 된 이진 스트림을 보낼 수 있습니다.Python 3.1 - 이진 팩 된 메시지 가변 길이 데이터 보내기

단일 메시지의 형식은, 그러나

s = struct.Struct('> L L I I 2110s') 
s.pack(*mystruct) # Then I pack it 

, 내가 가변 길이 페이로드를 위해 그것을 어떻게 사용합니까 (2110)의 고정 된 크기의 문자열이 유일한 작품? 다른 것을 사용해야할까요?

답변

1

헤더에 struct을 사용하고 나중에 페이로드를 추가하십시오. 당신이 (있다, 결국 그냥 문자열) 형식 문자열을 생성 한 다음 설명으로 s.pack와 함께 사용할 수 있었던 것처럼

message = struct.pack('> L L I I', *header) + payload 
+0

감사합니다. 그것은 작동 좋아한다 매력. – shaks

0

는 것 같습니다.

현재 구문이

s = struct.Struct('> L L I I 2110s') 
s.pack(*mystruct) 

당신이 할 필요가있는 모든

s = struct.Struct('> L L I I %ds' % size_of_data) 
s.pack(*mystruct) 

그것은 하나의 구조체, 다음 가변 길이 섹션으로 먼저 헤더를 만드는 데 도움이 될 것입니다 경우, 연결할 그들.