我试图在 c++ 和 java 之间交换消息,反之亦然,但没有成功。我用联合类型定义了两条消息(一条从 c++ 发送到 java,另一条从另一个方向发送)(见附件 .proto)。
c++代码如下:
operational_gui::OperationalMessage message;
message.set_type(operational_gui::OperationalMessage::OWNPOSITIONREPORT);
message.mutable_oprep()->set_latitude(38.5);
message.mutable_oprep()->set_longitude(-9.8);
message.mutable_oprep()->set_heading(25);
message.mutable_oprep()->set_validity(0);
message.SerializeToArray(buf, message.ByteSize());
m_pNamedPipeSocket->write(buf, message.ByteSize());
m_pNamedPipeSocket->flush();
java代码如下:
int bytes = pipe.read(buffer);
MessagesProtos.OperationalMessage message = MessagesProtos.OperationalMessage.parseFrom(buffer);
switch(message.getType()){
case OWNPOSITIONREPORT:
System.out.println("Response is OwnPositionReport");
break;
case FRIENDPOSITIONREPORT:
System.out.println("Response is FriendPositionReport");
break;
case COMMSTATUSREPORT:
System.out.println("Response is CommStatusReport");
break;
}
通过管道进行通信(c++ 上的 QLocalSocket,java 端的 FileInputStream)
C++ 发送了 33 个字节,java 收到了它们,但出现异常 InvalidProtocolBufferException:协议消息包含无效标记(零)。
有什么提示吗?
提前致谢。