使用C ++ API在Protocol Buffer中解析错误

时间:2014-01-29 15:49:19

标签: c++ protocol-buffers

我有一个test.proto文件,其代码如下所示。我在我的客户端服务器程序中使用此文件生成的代码。

message Person {
required string user_name        = 1;
optional int32  favourite_number = 2;
repeated string interests        = 3;

}

客户端我发送数据没有问题,但在服务器端我收到协议缓冲区解析错误(在文件中:\ protobuf \ message_lite.cc(line123))说"无法解析类型为&的消息#39;人'因为它缺少必填字段:user_name"

虽然我已经检查了我的客户端但是找不到任何错误,但我可能会在服务器端遗漏一些没有读取字符串数据的东西?

               //Server side code for Protocol Buffers
               Person filldata;
       google::protobuf::uint32 size;
               //here i might need google::protobuf::string stsize; Not sure ?
       google::protobuf::io::ArrayInputStream ais(buffer,filldata.ByteSize());
       CodedInputStream coded_input(&ais);
       coded_input.ReadVarint32(&size);
               //have tried here both coded_input.ReadString and coded_input.ReadRaw
       filldata.ParseFromCodedStream(&coded_input);

       cout<<"Message is "<<filldata.DebugString();
               //still getting same error have no idea what to do exactly to fix it :(

已经Looked Here但是仍然无法从这个解释中得到它,希望有人能解决它。

谢谢!

1 个答案:

答案 0 :(得分:1)

google::protobuf::io::ArrayInputStream ais(buffer,filldata.ByteSize());

此时,filldata是新初始化的消息,因此filldata.ByteSize()为零。所以,你告诉protobufs解析一个空数组。因此,没有设置字段,并且您得到必填字段错误。消息具有可变长度,因此您需要确保从服务器传递确切的消息大小。