2010-11-03 75 views
5

我试图通过TCP连接发送C++ ojbects发送对象:序列化和通过TCP使用升压

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

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

我有点卡住了,因为我不知道如何发送这个。我不明白将数据转换为字符缓冲区的步骤以及在缓冲区开始处添加额外信息(消息类型&大小),然后将此缓冲区赋予tcp连接的发送函数的步骤,所有这些尽可能少拷贝。

谢谢。

-

回答

7

Here,你可以找到关于如何使用的boost :: ASIO一起使用boost ::系列化一个很好的例子。

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

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

感谢您的回答。你给出站数据是什么类型的? – Arthur 2010-11-03 13:33:48

+0

我得到了代码[here](http://www.boost.org/doc/libs/1_38_0/doc/html/boost_asio/example/serialization/connection.hpp)。 outbound_data_被声明为std :: string – peoro 2010-11-03 13:45:47