代码之家  ›  专栏  ›  技术社区  ›  0x26res

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

  •  5
  • 0x26res  · 技术社区  · 14 年前

    我试图通过TCP连接发送C++ OjBeBTS:

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

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

    我有点困了,因为我不知道怎么发这个。我不明白将数据转换为char缓冲区,并在缓冲区的开头添加额外的信息(消息类型和大小),然后将这个缓冲区提供给tcp连接的send函数,所有这些都需要尽可能少地复制。

    谢谢。

    1 回复  |  直到 14 年前
        1
  •  8
  •   peoro    14 年前

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