У меня есть класс, очень глупый класс. Объекты этого класса, я хочу отправить их через tcp, используя asio путем boost. Мой класс правильно делает дружбу с boost stuff и реализует метод serialize ...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 IT WORKS !!! Вы знаете, как это решить?
Где `data` определяется на сервере? Я вижу только `data_recv`. Я имею в виду строку X. – chrisaycock 2010-12-07 21:50:15