私は、次のPythonのコード例を実行すると、はPythonでソケットからバイナリデータを読み取る
tick = 0
while True:
tick += 1
print tick
data = s.recv(1024)
if (tick == 1) and data:
print 'from client: %s' %(data)
elif (tick == 2) and data:
print 'from client: %s' %(data)
私が見る、
1
from client: client msg
2
from client: ?
3
私の直感はs.recvする私の第二の呼び出しを伝えます()実際にはいくつかのデータを返します。そして私は、クライアントが `? 'を送信していないことをかなり確信しています。キャラクター。
だから私は、 `データ」の最初のバイトを印刷することを望んでコードを変更
elif (tick == 2) and data:
print 'from client: %s' %(data)
print struct.unpack("!B", data)
しかし、私は述べてトレースバックを取得:『struct.errorを:アンパック長さ1の文字列引数を必要とします』
structパッケージは、ソケットデータを処理する標準的な方法のようです。しかし、この状況は奇妙に見えます。私は印刷して視覚的にデータを受け取り、 "?"コードには条件に "and data"が含まれていますが、私は解凍できません。
ソケットからバイナリデータを処理する別の方法はありますか?
repr(data)の値は '\ xaa \ xae'です。私はこれから最初のバイトを解凍することはできませんか? – brooksbp
はい、ただし2バイトです。 –