protobuf 2.4.1 - 将数据从c ++发送到Java

时间:2012-12-05 17:49:16

标签: java c++ qt protocol-buffers

我正在尝试在c ++和java之间交换消息,反之亦然,但没有成功。 我已经定义了两个消息(1个从c ++发送到java,另一个用反向发送)和union类型(参见附件.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:协议消息包含无效标记(零)。

任何提示?

提前致谢。

2 个答案:

答案 0 :(得分:0)

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

http://qt-jambi.org/

答案 1 :(得分:0)

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