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

对应的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日

悬赏问题

  • ¥15 Opencv配置出错
  • ¥15 模电中二极管,三极管和电容的应用
  • ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
  • ¥15 气象网格数据与卫星轨道数据如何匹配
  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
  • ¥15 微软账户问题不小心注销了好像
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?