2010-11-03 76 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