从python中的套接字读取二进制数据

bro*_*sbp 2 python sockets binary parsing

当我运行以下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)
Run Code Online (Sandbox Code Playgroud)

我知道了,

1
from client: client msg
2
from client: ?
3
Run Code Online (Sandbox Code Playgroud)

我的直觉告诉我第二次调用s.recv()实际上返回了一些数据.我相当肯定客户端没有发送`?' 字符.

所以我修改了希望打印`data'的第一个字节的代码,

    elif (tick == 2) and data:
        print 'from client: %s' %(data)
        print struct.unpack("!B", data)
Run Code Online (Sandbox Code Playgroud)

但后来我得到一个回溯声明:"struct.error:unpack需要一个长度为1的字符串参数."

struct包似乎是处理套接字数据的标准方法.但是,这种情况似乎很奇怪.我通过打印和看到"?"来直观地接收数据.并且代码在条件中也有"和数据"但我无法解压缩.

是否有不同的方法来处理套接字的二进制数据?

tzo*_*zot 5

elif (tick == 2) and data:
        print 'from client: %r' % data # (note 1)
        print struct.unpack("!B", data[0]) # (note 2)
Run Code Online (Sandbox Code Playgroud)
  1. 打印像Ignacio建议的表示.
  2. 你想要取消一个字节,所以给struct.unpack一个字节.