0

我有一个服务器客户端应用程序。服务器使用 C++,而客户端使用 C#。当客户端在 Windows 中时,服务器可能在 Linux 实例上运行。因此,我们不能对架构和字节序做出任何假设。我正在使用 protobuf 来回发送数据结构。目前采用的策略是发送一条消息作为头,其中包含下一条消息的大小,这是一个大数据结构。看起来像:

message message_size {
    required fixed64  size = 1;
}

有没有办法知道protobuf将在两端发送多少字节,即上述结构将被序列化为多少字节?

4

1 回答 1

1

这里的最终问题是根 protobuf 消息没有长度前缀(按设计)。没有明确的商定 API 用于处理开放流上的多条消息,因此基本上:您关心编码和处理的任何长度前缀都可以工作。一种常见的模式是使用带有虚拟字段编号的 protobuf 规则来处理它;在 protobuf-net 的情况下,这就是它SerializeWithLengthPrefixDeserializeWithLengthPrefix作用;但是:这可能不容易从 C++ 中获得。使用固定宽度/字节序规则手动编码长度可能更容易,然后立即转储原始有效负载。

于 2018-05-15T23:01:04.930 回答