C ++谷歌协议缓冲区打开http套接字

那么有帮助的人:

这是另一个NEWBIE问题。 我是C ++,Google协议缓冲区的新手,通过HTTP序列化消息时没有使用SOAP(即使使用SOAP也是如此)。 我试图通过http发送图像数据。 有人告诉我Google Protocol Buffers是最好的选择。 所以我急切地开始浏览所有文档,并使用CocoaPods安装Google Protocol Buffer类并将其包含到我的项目中。 我创建了我的.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(*发送器)是从仅包含ipAddress和端口号的.protoc文件生成的C ++类和头。 好的,所以我有一个ipaddress和一个端口的发射器。 怎么办? 我如何用它打开一个套接字?

也许一旦我打开一个套接字,其他答案会对我更有意义。 有人可以帮助解除我的混淆?

谢谢。


Protocol Buffers只是一个序列化工具。 它会将您的消息对象转换为字节,并将字节转换回消息对象。 该库不直接实现传输这些字节的方式。

如果你有一个原始套接字,你可以将它封装在FileInputStream / FileOutputStream以从/读取/写入protobufs *。 由于protobufs不是自定义的,因此您需要将大小写为前缀,然后是数据,并在接收端正确解释它们。 请参阅我对这个问题的回答,以获取相关代码:Java中Protocol Buffers分隔的I / O函数是否存在C ++等价物?

另一种方法是使用ZeroMQ这样的高级传输库,它实现了发送和接收byte-blob消息。 使用protobufs对字节块进行编码/解码,然后将它们交给ZeroMQ进行传输。

*这适用于Unix,其中套接字是文件描述符。 在Windows中,它们不是,所以您需要直接使用send() / recv()方式实现ZeroCopyInputStream / ZeroCopyOutputStream ,如果您使用CopyingInputStreamAdapter / CopyingOutputStreamAdaptor ,这并不难。

链接地址: http://www.djcxy.com/p/48333.html

上一篇: C++ Google Protocol Buffers open http socket

下一篇: Accessing C++ typedef in Python using SWIG