2010-12-07 16 views
1

私は非常に愚かなクラスのクラスを持っています。このクラスのオブジェクトは、boostでasioを使ってtcp経由で送信したいと思います。私のクラスは、ブーストのものと正しく友好関係を作り、メソッドを直列化します。C++チャネル上でシリアル化された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 IT WORKSを取り除くと骨抜きだ! これを解決する方法をご存知ですか?

+0

クライアントにストリームにフラッシュをコールする必要がありますか?私はそこに 'data_recv'しか見ることができません。私はX行を参照しています。 – chrisaycock

+0

ええ、申し訳ありませんが、私は私のコピーを間違っています...私は訂正を投稿しました... – Andry

+0

クライアントがラインQまたはWでブロックしているかどうか知っていますか?サーバに似ています。 – chrisaycock

答えて

2

あなたは `data`は、サーバーで定義されている

oa << data_send; 
data_stream.flush(); 
関連する問題