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

时间:2010-11-03 13:00:36

标签: c++ serialization boost tcp

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

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

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

我有点卡住了,因为我不知道怎么发送这个。我不明白将数据转换为char缓冲区的步骤是什么,并在缓冲区的开头添加额外信息(消息类型和大小),然后将此缓冲区提供给tcp连接的send函数,尽可能少的副本。

感谢。

-

1 个答案:

答案 0 :(得分:7)

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);