我遵循了boost asio实现提供的documentation and examples,但是在将客户端连接到服务器后没有任何运气。无论成功或失败,都不会调用处理程序。我已经验证服务器正在接收并接受来自客户端的连接,但是客户端上没有任何反应表明成功。
void ssl_writer::main_thread() {
using namespace std::placeholders;
using namespace asio::ip;
tcp::resolver resolver(io_context);
tcp::resolver::query query("192.168.170.115", "8591");
tcp::resolver::iterator endpointer_iterator = resolver.resolve(query);
io_context.run();
std::cout << "connecting...";
asio::async_connect(socket.lowest_layer(), endpointer_iterator, std::bind(&ssl_writer::handle_connect, this, _1));
}
//...
void ssl_writer::handle_connect(const std::error_code& error) {
if (!error) {
std::cout << "connected!";
}
else {
std::cout << "failed!";
}
}
答案 0 :(得分:1)
io_context::run()
处理处理程序,直到没有更多处理程序要处理为止。由于您尚未运行任何异步调用,因此没有处理程序,run
立即返回。
在这个简单的示例中,您需要在io_context::run()
之后调用async_connect
,在更复杂的程序中,通常会创建一个工作线程来调用io_context::run()
并创建{{1}的实例},以防止boost::asio::executor_work_guard
用尽。