Boost Asio не правильно читает

В моем коде я настроил сокет клиента и сервера, чтобы имитировать взаимодействие между ними с помощью asio. К сожалению, что-то не так в моем read (), и я не совсем уверен, что я не передаю правильно и почему. Когда я запускаю его, он будет ждать бесконечно. Может быть, я чего-то не понимаю?

boost::asio::io_service ioservice;
tcp::acceptor acceptor(ioservice);
tcp::socket client(ioservice);
tcp::socket server(ioservice);

boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::address::from_string("127.0.0.1"), 2222);

acceptor.open(endpoint.protocol());
acceptor.bind(endpoint);
acceptor.listen();
acceptor.async_accept(server, &acc_handle);

client.async_connect(endpoint, &conn_handle);

ioservice.run();

boost::asio::write(client, boost::asio::buffer("test"));

boost::asio::streambuf bfr;
boost::asio::read(client, bfr);

РЕДАКТИРОВАТЬ: Добавлены обработчики, они просто регистрируют информацию, поэтому я опускаю их определение.

0

Решение

Если это реальный поток кода, то ничего после ioservice.run(); выполняется, пока вы не остановите его, в какой момент нет ioservice операции выполняются либо. Код должен находиться в этих асинхронных обработчиках.

Трудно понять, что происходит, поскольку вы не включили определения обработчиков, но я постараюсь составить прогноз:

acc_handle должен содержать server.async_receive(read_buffer, [](const boost::system::error_code&, size_t){...});,

conn_handle, должен содержать client.async_send(write_buffer, endpoint, [](const boost::system::error_code&, size_t){...}); в этот момент вы сможете увидеть срабатывание обработчика приема сервера.

При этом я настоятельно рекомендую вам ознакомиться с соответствующими примерами на http://www.boost.org/doc/libs/1_64_0/doc/html/boost_asio/examples/cpp11_examples.html как они четко и чисто написаны.

1

Другие решения

Других решений пока нет …