2017-10-28 24 views
1

소켓 연결을 통해 데이터 패킷을 송수신하여 타사 TCP/IP 기반 API와 상호 작용하는 Python 2.7 프로그램을 작성 중입니다. Python 2.7/python-lzo로 압축 해제 MiniLZO 문자열 1.11

데이터 패킷

는 다음의 부분으로 구성

  • 10 바이트 길이의 헤더, 데이터의 앞에 삽입되고;
  • 본체;
  • 예고편을 데이터 끝에 추가해야합니다.

헤더에는 데이터 길이 및 데이터 유형에 대한 정보가 포함됩니다. 전체 데이터 패킷에는 헤더, 실제 데이터 및 트레일러가 포함됩니다.

압축 방법은 MiniLZO입니다.

내 문제는 데이터를 처리하는 방법입니다. 특히 MiniLZO로 압축 된 패킷 본문입니다. 예를 들어

, I 이런 요청 보낼 때

bytearray(b'\x01W\x00\x00\x000W\x00\x00\x00') 
<TASK><MESSAGE Type="LogonReq" Session="" Reference="TP1" Product="2"> 
</MESSAGE></TASK> 
bytearray(b'\x02') 

서버가 회신 :

: I 패키지 python-lzo 1.11를 설치하여 몸을 압축 해제하려
HEADER: 10 Bytes 

'\x01\xb1\x00\x00\x001\xae\x00\x00\x00' 

BODY:177 Bytes 

'\x002<TASKREPLY><MESSAGE Type="LogonReqReply" Session="DUH3PRdH" 
ReferencP\x05\x00\x18TP1" Product="2">\r\n<ANSWER Result="1" 
[email protected]\x01\x00\x1225146" Date="20171028" Mode="P" /></\xcc\x11\x0c> 
</TASKREPLY>\r\n\x11\x00\x00' 

TRAILER:1 Bytes 

'\x02' 

>>> import lzo 
>>> lzo.decompress(body) 

하지만이 오류를 반환합니다 :

Traceback (most recent call last): 
    File "<pyshell#1>", line 1, in <module> 
    lzo.decompress(body) 
error: Header error - invalid compressed data 

이 문제를 해결하는 방법을 모릅니다. 나는 그것을 시도했지만 파이썬/미니 LZO에 관한 정보는 거의 없다. lzo 패키지를 잘못된 방법으로 사용했는지 또는 데이터가 처음에 부적절하게 압축되었는지 확실하지 않습니다.

답변

0

시행 착오를 통해 압축 문자열의 길이를 압축 해제 함수에 전달하여 작동하게해야한다는 것을 알았습니다. 작동 방식 :

lzo.decompress(body,False,176)