1

私はクラス、非常に愚かなクラスを持っています。このクラスのオブジェクトは、asio by 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の行を削除すると、うまくいきます!!! これを解決する方法を知っていますか?

4

1 に答える 1

2

クライアントのストリームでフラッシュを呼び出す必要があります

oa << data_send;
data_stream.flush();
于 2011-09-01T08:20:54.403 に答える