对应的handle_accept函数却一直都没有进行调用,我想知道是不是placeholders::_1的问题(标签-Qt|关键词-网络编程)

Qt使用网络编程boost库进行异步操作时,在客户端中的async_accept函数中绑定了bind,如下

_acceptor.async_accept(new_session->Socket(),
                           std::bind(&Server::handle_accept, this, new_session, placeholders::_1));

但不知道为什么,对应的handle_accept函数却一直都没有进行调用,我想知道是不是placeholders::_1的问题,一直弄不了

在你的代码中,placeholders::_1是一个占位符,表示handle_accept函数的第一个参数。当async_accept操作完成(无论成功或失败)时,它应该被填充为boost::system::error_code类型的参数。

如果你的handle_accept函数没有被调用,那可能有以下几个原因:

  1. 客户端没有发送连接请求:确保你的客户端正在尝试连接到服务器。如果没有任何尝试连接的客户端,async_accept将不会调用handle_accept函数。

  2. 错误的绑定:请检查handle_accept函数的签名是否正确。它应该接受两个参数:第一个是一个boost::system::error_code对象,第二个是你的new_session对象。如果函数签名不匹配,那么std::bind可能会失败,导致handle_accept函数无法正确调用。

  3. I/O服务未运行:你是否有在程序中运行boost::asio::io_service对象(通常被命名为io_service或者io)?在异步操作中,需要保证io_service在等待操作完成的过程中是运行的。如果你的程序在调用async_accept后立即退出,那么handle_accept函数就不会被调用。

  4. 端口或网络问题:你的服务器是否在正确的端口上监听?或者,有没有防火墙或安全软件阻止连接?

你可以尝试添加错误检查代码和更多的日志输出来帮助识别问题。例如,在async_accept调用之后立即检查boost::system::error_code,看看是否报告了错误。