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

5
我正在尝试通过tcp连接发送C++对象:
  • 我的所有对象都是可序列化的,使用boost序列化。
  • TCP服务器/客户端是使用boost asio制作的。

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

我有点困惑,因为我不知道如何发送这个。我不明白将数据转换为char缓冲区的步骤,以及在缓冲区开头添加额外信息(消息类型和大小),然后将该缓冲区提供给tcp连接的send函数,所有这些操作都需要尽量少地进行副本操作。

谢谢。

1个回答

7

这里有一个很好的例子,展示了如何将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);

谢谢你的回答。你给出站数据什么类型? - 0x26res
我从这里获取了代码。outbound_data_声明为std :: string。 - peoro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接