服务器返回结果为空,[解码问题请教] 基于 protobuf 的 websockets 接收服务器返回数据后,...

问题

写了个 websockets 连接服务器,用的是 protobuf 协议,序列化成功后发送服务器,成功收到返回(这里以登录协议来说明),并且确认了日志和游戏另一个客户端成功踢下线。然后收到服务器返回之后用 ParseFromString 去反序列化,也是成功拿到了返回的数据。但是返回数据中的 data 字段其实是一个嵌套的 protobuf,这里尝试多次实在不知如何解码,请论坛各位大佬指点迷津。

部分代码如下: async def main_logic():

async with websockets.connect(_server_ws_url) as ws:

await ws.send(loginmsg.SerializeToString())

recv_text = await ws.recv()

logininfo.ParseFromString(recv_text)

print(logininfo)

print(logininfo.result, logininfo.messageId) //服务端发给客户端的命令数据

message ServerCmdData {

required sint32 messageId = 1;

required sint32 clientIndex = 2;

required sint32 serverIndex = 3;

optional bytes data = 4;//命令主数据

required bool result = 5;

}

拿到的返回数据,反序列化之后结果如下 messageId: 1001

clientIndex: 0

serverIndex: 1

data: "\n<18c04dfffe136cb9-000017cc-0000000f-2a58a19679d30b77-2e650bea\022V\010\226\254\366\300\235\003\022\006poke22\030\027 \327\017(\352\0140\214\211\321\322\0038\324>@\000H\241\302\036P\000X\000`\000h\017p\244Nx\000\200\001\345\304\023\210\001\000\220\001\003\230\001\361\274\014\240\001\336\332\220\377\005\250\001\000\260\001\000\270\001\000\300\001\000"

result: true

客户端发送大概是这样的:第一层 message 数据序列化,作为客户端 message 的 data 数据,再整个 message 序列化发送。所以我以为服务器也是这样,登录返回相关的 message 序列化后作为 message ServerCmdData 的 data(byes 类型) 主数据,再整个 message ServerCmdData 序列化后发送给客户端。但是我不知道怎么解码接收到的 data。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值