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を取り除くと骨抜きだ! これを解決する方法をご存知ですか?
クライアントにストリームにフラッシュをコールする必要がありますか?私はそこに 'data_recv'しか見ることができません。私はX行を参照しています。 – chrisaycock
ええ、申し訳ありませんが、私は私のコピーを間違っています...私は訂正を投稿しました... – Andry
クライアントがラインQまたはWでブロックしているかどうか知っていますか?サーバに似ています。 – chrisaycock