gpt4 book ai didi

c# - 谷歌从 golang 到 c# 的 protobuf - 协议(protocol)消息包含无效标签(零)

转载 作者:IT王子 更新时间:2023-10-29 01:47:15 25 4
gpt4 key购买 nike

当我使用 protobuf 将字节数据包从 C# 发送到 Golang 时,我没有遇到任何问题。但是当我从 Golang 向 C# 发送一个字节时出现错误。

我在 c# 中使用这段代码来获取 golang 发送的 protobuf:

 Stream stream = new MemoryStream(m);
PRSData data;
data = PRSData.Parser.ParseFrom(stream);
print(data);

然后我在 C# 中得到这个错误:

InvalidProtocolBufferException: Protocol message contained an invalid tag (zero). Google.Protobuf.CodedInputStream.ReadTag ()

另外c#生成的protobuf结构是对的,golang的不对

c#生成的protobuf结构为:

{ "action": "move", "id": "player_361", "room": "SyONuNo0W", "pos": { "x": 74.423, "y": -0.04, "z": 10.903 } }

golang生成的protobuf结构为:

action:"move" id:"player_361" room:"SyONuNo0W" pos:<x:74.423 y:-0.04 z:10.903 >

请帮助我在 C# 和 Golang 中使用 protobuf 并真正实现它们之间的转换。

最佳答案

当从套接字读取到缓冲区时,您需要确保正确跟踪您有多少数据。在您的示例(注释)中,这是 size,您必须确保任何处理都限于那么多字节。由于您使用的是 MemoryStream,您会注意到有一个构造函数接受缓冲区和偏移量(零)和计数(size)。

请注意,如果您在单个套接字上处理多条消息,您还需要处理“成帧”——TCP 不保证在发送数据的同一 block 中接收数据——只是接收到相同的字节相同的顺序。

关于c# - 谷歌从 golang 到 c# 的 protobuf - 协议(protocol)消息包含无效标签(零),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47111679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com