我知道这可能是一个非常简单的问题,但我已经尝试让asio的例子正确地工作了一个多星期了。每当我运行程序,终端挂起,不发送打印任何东西,不发送任何信息到客户端。我使用Ubuntu Linux和一个基本的编译器命令第一个任何帮助都将不胜感激
hc2pp10m1#
终端挂起,不向客户端发送任何打印信息和信息您需要首先连接客户端,因为您做的第一件事是阻塞accept,除非连接到达,否则它永远不会完成。我已经编译了你的程序(与小修改Boost Asio):
accept
//#define ASIO_STANDALONE #include <boost/asio.hpp> #include <ctime> #include <iostream> #include <string> namespace asio = boost::asio; using asio::ip::tcp; using boost::system::error_code; int main() { try { asio::io_context io_context; tcp::acceptor acceptor(io_context, tcp::endpoint(tcp::v4(), 1326)); for (;;) { tcp::socket socket(io_context); acceptor.accept(socket); std::cout << "hi " << socket.remote_endpoint() << std::endl; std::string message = "server message works\n"; error_code ignored_error; asio::write(socket, asio::buffer(message), ignored_error); break; } } catch (std::exception const& e) { std::cerr << e.what() << std::endl; } }
使用netcat模拟客户端:
nc 127.0.0.1 1326 -w 1 <<< "Hello world"
我们看到:
hi 127.0.0.1:45448 server message works
或者更清楚地显示在单独的端子中:
1条答案
按热度按时间hc2pp10m1#
终端挂起,不向客户端发送任何打印信息和信息
您需要首先连接客户端,因为您做的第一件事是阻塞
accept
,除非连接到达,否则它永远不会完成。我已经编译了你的程序(与小修改Boost Asio):
使用netcat模拟客户端:
我们看到:
或者更清楚地显示在单独的端子中: