2010-12-07 44 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();