C++ Google Protocol Buffer 打开 http 套接字

标签 c++ sockets protocol-buffers

非常有帮助的人:

这是另一个新手问题。我是 C++、Google Protocol Buffers 和在没有 SOAP 的情况下通过 HTTP 序列化消息的新手(即使使用 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 (*transmitter) 是从仅包含 ipAddress 和端口号的 .protoc 文件生成的 C++ 类和 header 。好的,所以我有这个带有 IP 地址和端口的发射器。怎么办?我如何用它打开套接字?

也许一旦我打开一个套接字,其他答案对我来说会更有意义。有人可以帮我解惑吗?

谢谢。

最佳答案

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

如果你有一个原始套接字,你可以将它包装在 FileInputStream/FileOutputStream 中从/向它读取/写入 protobufs*。由于 protobufs 不是自定界的,您需要将大小写为前缀,然后是数据,并在接收端正确解释这些。请参阅我对其他问题的回答以获取执行此操作的代码:Are there C++ equivalents for the Protocol Buffers delimited I/O functions in Java?

另一种选择是使用更高级的传输库,如 ZeroMQ,它实现字节 blob 消息的发送和接收。使用 protobufs 编码/解码字节 blob,然后将它们交给 ZeroMQ 进行传输。

* 这适用于 Unix,其中套接字是文件描述符。在 Windows 上,它们不是,因此您需要根据 send()/ 直接实现 ZeroCopyInputStream/ZeroCopyOutputStream >recv(),如果你使用 CopyingInputStreamAdapter/CopyingOutputStreamAdaptor 并不难.

关于C++ Google Protocol Buffer 打开 http 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23280457/

相关文章:

java - "UNAVAILABLE"从android客户端到python服务器的gRPC失败

c++ - 如何区分存储在模板类中的类型

android - 发送字节[]到服务器,outOfMemoryError

java - 发送到套接字时 Kotlin java.io.NotSerializedException

java - 如何通过同一套接字连接发送图像和文本

java - 如何将 Protocol Buffer 消息转换为 java 中的 HashMap?

c++ - 转换字节序的问题

c++ - 容器的元素如何访问其容器的 "owner"?

c++ - 条件运算符用法

c# - Google Protocol Buffers 序列化挂起写入 1GB+ 数据