(普罗托布夫)无法解析类型 "data.Data" 的消息,因为它缺少必填字段:ID
(ProtoBuf) Can't parse message of type "data.Data" because it is missing required fields: ID
我正试图通过winsock发送一个protocolbuffer文件,但在atm上遇到了以下问题。当我发送数据时,它可能是proto数据包"a"或"B"的序列化版本,但服务器不知道这一点。所有的proto数据包都有一个ID字段作为第一个字段,所以我制作了一个只有ID字段的数据包"C"。
当服务器接收到一个数据包时,它首先将其反序列化为一个"C"原型对象,只是为了检查它的ID。之后,当服务器知道ID时,可以再次将其反序列化为正确的proto对象。
因此,目前,我这样做,但当数据包到达时(它也是一个"C"对象来测试它(,它被反序列化为一个"C"对象,并返回此错误:
[librotobuf] Can't parse message of type "C" because it is missing reauired fields: ID
这看起来很奇怪,因为我在发送时已经填写好了。这和字节序有关吗?我有点迷上了这个。
感谢您的帮助。我希望问题是清楚的。
通常,在protobuf中区分不同传入消息类型的"标准"方法是定义一个包含这些不同消息的并集类型,以及一个字段来确定存在哪些消息。请参阅此处的官方文档
案例示例:
message A
{
// ...
}
message B
{
// ...
}
message C
{
enum Type { A = 1; B = 2; }
required Type type = 1;
optional A a = 2;
optional B b = 3;
}
相关文章:
- boost::进程间消息队列引发错误
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 在线编译器中的分段C++没有打印消息
- C++错误消息*成员参考.**初学者*
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 如何通过参数抛出错误消息
- 从服务器传输到客户端的消息不会出现
- ROS2 动态消息模板
- C++秘密消息学校作业
- glad 导致 glfwSwapBuffers 返回错误消息
- C++入门 5 版:类消息和文件夹
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 如何处理从一个对象传递到另一个在C++中具有公共抽象类的对象的消息
- 我可以在这里替换什么,因为我不能在 C# 中使用隐式变量的 lambda 函数?
- 如何接受 [ENTER] 键作为无效输入并发送错误消息
- 由于无效的 ValidateRgn() 子窗口不会收到WM_PAINT消息
- "string.h"在构建适用于iOS的qt应用程序中找不到消息
- 程序无法启动,因为缺少 libmpc-3.dll
- (普罗托布夫)无法解析类型 "data.Data" 的消息,因为它缺少必填字段:ID