我有一个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但是仍然无法从这个解释中得到它,希望有人能解决它。
谢谢!
答案 0 :(得分:1)
google::protobuf::io::ArrayInputStream ais(buffer,filldata.ByteSize());
此时,filldata
是新初始化的消息,因此filldata.ByteSize()
为零。所以,你告诉protobufs解析一个空数组。因此,没有设置字段,并且您得到必填字段错误。消息具有可变长度,因此您需要确保从服务器传递确切的消息大小。