python 使用ParseFromString反序列化bytes报错
google.protobuf.message.DecodeError: Error parsing message
python 使用socket测试protobuf
以下为解包代码
def recv(self):
data = self.client.recv(20000)
print("返回包总长度:", len(data))
"""固定值"""
header = struct.unpack('!i', data[0:4])[0]
moduleId = struct.unpack('!h', data[4:6])[0]
cmdId = struct.unpack('!h', data[6:8])[0]
resultId = struct.unpack('!i', data[8:12])[0]
messageLen = struct.unpack("!i", data[12:16])[0]
messagePushLen = struct.unpack('!i', data[messageLen+16:])[0]
print(header, moduleId, cmdId, resultId, messageLen, messagePushLen)
loginResp = pb2.MsgRespUserLogin()
print(loginResp.ParseFromString(data[16:messageLen + 16]))
问题
- 代码运行到
print(loginResp.ParseFromString(data[16:messageLen + 16]))
时报错,报错如下:
- 打断点,可以看到正确的数据,但是显示不完全
点击view显示如下
期望答案
- ParseFromString反序列化报错解决方案
- 打断点可以显示,控制台打印报错的原因,并且断点看的时候显示不全,是不是因为pycharm的问题,把数据截断了