2010-12-07 7 views
1

У меня есть класс, очень глупый класс. Объекты этого класса, я хочу отправить их через 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 !!! Вы знаете, как это решить?

+0

Где `data` определяется на сервере? Я вижу только `data_recv`. Я имею в виду строку X. – chrisaycock 2010-12-07 21:50:15

ответ

2

Вы должны вызвать поток на поток в клиенте

oa << data_send; 
data_stream.flush(); 

 Смежные вопросы

  • Нет связанных вопросов^_^