乐于助人的人:
这是另一个NEWBIE问题。我是C ++,Google协议缓冲区的新手,并在不使用SOAP的情况下通过HTTP序列化消息(即使使用SOAP)。我正在尝试通过http发送图像数据。有人告诉我,Google Protocol Buffers是必经之路。因此,我热切地开始阅读所有文档,并使用CocoaPods安装Google协议缓冲区类并将其包含到我的项目中。我创建了.protoc文件并生成了类。现在,我使用生成的类填充数据。怎么办???
我找不到有关如何发送数据的任何信息。我在SO上还发现了一些其他问题,其中包含了一些我可能会知道的有意义的信息。这是我到目前为止的内容:
void message::myMessage::transmit(const uint32_t ipaddress, uint32_t port, message::MatMessage* rawImage)
{
message::HostMessage *transmitter;
transmitter->set_ipaddress(ipaddress);
transmitter->set_port(port);
//open socket with ip and port
//send unsing socket
}
HostMessage(* transmitter)是从仅包含ipAddress和端口号的.protoc文件生成的C ++类和头。好,所以我的发送器有一个ip地址和一个端口。怎么办?我如何用它打开一个插座?
也许一旦我打开插座,其他答案对我来说就更有意义了。有人可以帮我弄混吗?
谢谢你。
协议缓冲区只是一个序列化工具。它将您的消息对象转换为字节,并将字节转换回消息对象。该库没有直接实现传输这些字节的方法。
如果您有原始套接字,则可以将其包装在FileInputStream
/中FileOutputStream
以从/读取/写入protobuf。由于protobuf不是自定界的,因此您需要将大小写为前缀,后跟数据,并在接收端正确解释这些大小。请参见我对另一个问题的回答,以获取有关执行此操作的代码的信息:Java中是否有协议缓冲区分隔的I / O函数的C ++等效项?
另一种选择是使用更高级别的传输库,如ZeroMQ,该库实现发送和接收字节blob消息。使用protobufs对字节Blob进行编码/解码,然后将其交给ZeroMQ进行传输。
*这在Unix上有效,套接字是文件描述符。在Windows中,他们都没有,所以你需要实现ZeroCopyInputStream
/ZeroCopyOutputStream
直接来讲send()
/ recv()
,如果你使用的是不是太硬CopyingInputStreamAdapter
/CopyingOutputStreamAdaptor
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句