C++ Boost сериализованные объекты TCP на канале, двунаправленная связь не работает

У меня есть класс, очень глупый класс. Объекты этого класса, я хочу отправить их по tcp с помощью asio через boost. Мой класс правильно дружит с вещами boost и реализует сериализацию метода...

Ну, я хочу, чтобы клиент подключался к серверу, отправлял ему мой объект, а затем сервер отправлял обратно другой объект того же класса.

Я пытался сделать это:

На сервере:

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, ЭТО РАБОТАЕТ!!! Вы знаете, как решить эту проблему?


person Andry    schedule 07.12.2010    source источник
comment
Где data определяется на сервере? Я вижу там только data_recv. Я имею в виду линию X.   -  person chrisaycock    schedule 08.12.2010
comment
Да, извините, я ошибся при копировании... Я разместил исправление...   -  person Andry    schedule 08.12.2010
comment
Вы знаете, блокирует ли клиент линию Q или W? Аналогично для сервера.   -  person chrisaycock    schedule 08.12.2010
comment
Ну, кажется, он блокирует на LINE Q, то же самое для сервера   -  person Andry    schedule 08.12.2010


Ответы (1)


Вам нужно вызвать флеш в потоке в клиенте

oa << data_send;
data_stream.flush();
person micdelt    schedule 01.09.2011