c++ - 使用 boost 通过 TCP 序列化和发送对象

标签 c++ serialization boost tcp

我正在尝试通过 tcp 连接发送 C++ 对象:

  • 我的对象都是可序列化的,使用 boost 序列化。
  • TCP 服务器/客户端是用 boost asio 制作的。

基本上我想发送包含消息类型(被发送对象的类型)和数据本身(序列化对象)和数据大小的消息,这样我就可以处理缓冲区(大小同一类型的对象可能会有所不同,因为它不是 POD)。

我有点卡住了,因为我不知道如何发送这个。我不明白将数据转换为 char 缓冲区的步骤是什么,并在缓冲区的开头添加额外的信息(消息类型和大小),然后将此缓冲区提供给 tcp 连接的发送函数,所有这一切都需要尽可能少地进行复制。

谢谢。

-

最佳答案

Here你可以找到一个很好的例子,说明如何将 boost::serialization 与 boost::asio 一起使用。

像这样的东西是你需要的核心:

std::ostringstream archive_stream;
boost::archive::text_oarchive archive(archive_stream);
archive << YOUR_DATA;
outbound_data_ = archive_stream.str();
boost::asio::async_write(socket_, boost::asio::buffer(outbound_data_), handler);

关于c++ - 使用 boost 通过 TCP 序列化和发送对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4087263/

相关文章:

c++ - std::regex 是否始终了解区域设置?

c# - 后锐利。如何引入可序列化属性

php - Symfony 从输出序列化实体转义反斜杠

c++ - Boost shared_ptr 不会立即销毁对象

c++ - 绑定(bind) boost::asio::steady_timer::async_wait

c++ - 如何在构建 Thrift 0.9.2 时启用 TNonblockingServer

c++ - 线程与同步

c++ - 如何将二进制格式的 C++ 对象的 std::vector 保存到磁盘?

c++ - 如何在 BGL 中按照(捆绑)属性提供的顺序迭代顶点和边?

c++ - 对 CGAL 类型使用基于范围的 for 循环