В моем коде я настроил сокет клиента и сервера, чтобы имитировать взаимодействие между ними с помощью 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);
РЕДАКТИРОВАТЬ: Добавлены обработчики, они просто регистрируют информацию, поэтому я опускаю их определение.
Если это реальный поток кода, то ничего после 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 как они четко и чисто написаны.
Других решений пока нет …