c++ asio tcp服务器挂起

osh3o9ms  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(112)

我知道这可能是一个非常简单的问题,但我已经尝试让asio的例子正确地工作了一个多星期了。每当我运行程序,终端挂起,不发送打印任何东西,不发送任何信息到客户端。我使用Ubuntu Linux和一个基本的编译器命令
第一个
任何帮助都将不胜感激

hc2pp10m

hc2pp10m1#

终端挂起,不向客户端发送任何打印信息和信息
您需要首先连接客户端,因为您做的第一件事是阻塞accept,除非连接到达,否则它永远不会完成。
我已经编译了你的程序(与小修改Boost Asio):


//#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

或者更清楚地显示在单独的端子中:

相关问题