4

我试图在 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:协议消息包含无效标记(零)。

有什么提示吗?

提前致谢。

4

2 回答 2

0

在 Linux 系统上,您还可以考虑使用gobjects或使用DBUS(也有 Windows 端口)。

于 2012-12-12T13:07:40.763 回答
0

您可以尝试 Qt Jambi:“[...] 此外,Qt Jambi 还使 C++ 程序员能够通过提供 Qt Jambi 生成器轻松地将其 Qt 代码与 Java 集成。”

http://qt-jambi.org/

于 2012-12-12T11:51:39.680 回答