当我运行以下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包似乎是处理套接字数据的标准方法。但是,这种情况似乎很奇怪。我通过打印看到“?”以可视方式接收数据。并且该代码在条件中也包含“和数据”,但我无法解压缩。

有没有其他方法可以从套接字处理二进制数据?

最佳答案

elif (tick == 2) and data:
        print 'from client: %r' % data # (note 1)
        print struct.unpack("!B", data[0]) # (note 2)
  • 打印像Ignacio建议的表示形式。
  • 您想解包一个字节,所以给struct.unpack一个字节。
  • 关于python - 从python中的套接字读取二进制数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6560302/

    10-15 00:32
    查看更多