2010-12-07 20 views
1

我有一個類,一個非常愚蠢的類。這個類的對象,我想通過tcp使用asio通過boost來發送它們。我的班正確地與助推器的友誼,並實現方法序列化...C++ Boost TCP序列化對象的通道,雙向通信不起作用

嗯,我想客戶端連接到服務器,發送它我的對象,然後服務器發回相同類的另一個對象。

我試着這樣做:

在服務器:

Data data; 
int port = 2040; 
boost::asio::io_service io_s; 
tcp::acceptor data_acceptor(io_s, tcp::endpoint(tcp::v4(), port)); 
tcp::iostream data_stream; 
Data data_recv; 
data_acceptor.accept(*(data_stream.rdbuf())); /* Accepting */ 
boost::archive::binary_iarchive ia(data_stream); 
ia >> data_recv; 
boost::archive::binary_oarchive oa(data_stream); /* LINE Y */ 
oa << data; /* LINE X */ 
data_stream.close(); 

數據是序列化的類。

在客戶端:

Data data_send; 
Data data_recv; 
tcp::iostream data_stream("127.0.0.1", "2040"); /* Creating TCP stream */ 
boost::archive::binary_oarchive oa(data_stream); 
oa << data_send; 
boost::archive::binary_iarchive ia(data_stream); /* LINE Q */ 
ia >> data_recv; /* Receive LINE W */ 
data_stream.close(); 

好了,這是行不通的。它以某種方式阻止。

這是古怪的,因爲問題是這種雙向計劃,如果我消除線Q,W,X,Y它工作! 你知道如何解決這個問題嗎?

+0

凡`data`服務器中定義?我只在那裏看到`data_recv`。我指的是X. – chrisaycock 2010-12-07 21:50:15

回答

2

您需要在客戶端調用平齊流

oa << data_send; 
data_stream.flush();