2017-10-28 7 views
1

私は、ソケット接続を介してデータパケットを送受信することで、サードパーティのTCP/IPベースのAPIと対話するPython 2.7プログラムを作成しています。Python 2.7/python-lzoで圧縮解除MiniLZO文字列1.11

データ・パケットは、次の部分から構成:

  • 10バイトの長さヘッダは、データの前に挿入されています。
  • ボディ;
  • データの末尾にトレーラを追加する必要があります。

ヘッダーには、データの長さとデータの種類に関する情報が含まれています。データパケット全体は、ヘッダ、実際のデータ、および予告編を含む。

圧縮方式はMiniLZOです。

私の問題は、データを扱う方法、具体的にはMiniLZOで圧縮されたパケットの本体です。

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

サーバの応答:

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' 

Iパッケージpython-lzo 1.11をインストールし、体内を解凍しようとした:

私はこのような要求を送信したときに例えば

>>> 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 

この問題の解決方法はわかりません。私はそれをgoogleにしようとしましたが、Python/MiniLZOに関する情報はほとんどありません。 lzoパッケージを間違った方法で使用したか、データが最初に不適切に圧縮されたかどうかはわかりません。

答えて

0

試行錯誤の結果、私は圧縮された文字列の長さを解凍関数に渡して動作させる必要があることが分かりました。これは次のように機能します。

lzo.decompress(body,False,176) 
関連する問題