使用boost序列化通过boost-asio套接字连接发送序列化类型

时间:2011-07-18 02:45:33

标签: c++ sockets serialization boost boost-asio

我正在尝试将1kb的数据从“服务器”发送到“客户端”,但我无法做到正确。 我需要做一些事情: 1)需要使用boost-asio套接字来传输数据 2)需要序列化我创建的类型(Packet),它将包含数据作为字符串或char *

以下是发生的事情:

首先,我从服务器上的示例文本文件中获取1kb的数据。我得到了这个并将其放入我创建的Packet类型中。我已经在Packet中定义了数据字段以将此数据保存为std :: string。 (我尝试了char *但它没有奏效 - 见下一段)。

其次我使用boost text_oarchive对其进行序列化。如果它只包含一个字符串,那么序列化Packet类型没有问题,但我真正想要的是一种序列化它的方法,数据类型是一个char数组(这样它可以更好地使用下面的套接字)

第三,我通过一个提升asio socket发送它。这里我有一个问题,因为我找不到通过套接字连接发送std :: string的方法。我在示例和文档中看到的所有内容都需要使用某种类型的char *而不是字符串的缓冲区。

它只是一个令人头痛的问题。你能帮忙吗?

1 个答案:

答案 0 :(得分:0)

  

我看到的所有示例和文档都需要缓冲区   使用某种类型的char *而不是字符串

这是正确的,尽管使用Boost.Serialization和Boost.Asio非常简单。您可以使用text_oarchive序列化为boost::asio::streambuf,然后使用套接字发送生成的流缓冲区内容。

有关更完整的示例,请参阅此问题的questionmy answer