gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-27 23:06:24 26 4
gpt4 key购买 nike

非常有帮助的人:

这是另一个新手问题。我是 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com