栈不收 2023-06-20 03:50 采纳率: 55.6%
浏览 10
已结题

对应的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的问题,一直弄不了

  • 写回答

1条回答 默认 最新

  • 泡沫o0 2023年度博客之星上海赛道TOP 1 2023-06-20 10:53
    关注

    在你的代码中,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,看看是否报告了错误。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月29日
  • 已采纳回答 6月21日
  • 创建了问题 6月20日