You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用QNetworkAccessManager多线程FTP下载遇421错误未触发回调的问题

FTP 421连接超限响应的捕获问题及QFtp支持情况

QNetworkAccessManager的局限性

  • 你的判断是正确的:QNetworkAccessManager的FTP实现不会将421这类连接超限响应映射为上层的errorOccurred或finished信号。这类服务器主动触发的连接断开,底层通信异常中断后,QNAM的上层逻辑没有将其转化为可监听的信号,导致你无法直接通过API获取该响应信息,只能通过抓包看到。

QFtp的支持情况

  • QFtp(Qt4及更早版本提供的FTP模块,Qt5后已被标记为废弃)完全支持捕获这类FTP响应:
    • QFtp会解析所有FTP控制命令的响应码,包括421。
    • 你可以连接QFtp::commandFinished(int id, bool error)信号,在回调函数中通过QFtp::error()获取错误码,QFtp::errorString()获取对应的提示文本(即"There are too many connections from your internet address")。
    • 此外,QFtp原生支持对并发命令的控制,你可以通过限制同时发起的下载任务数量,从根源避免触发服务器的连接超限限制。

额外建议

  • 若使用Qt5及以上版本,由于QFtp已废弃,你可以选择:
    • 基于QTcpSocket自行封装FTP客户端逻辑,实现对所有FTP响应码的解析和处理;
    • 使用第三方成熟的FTP库,实现精细化的FTP通信控制。
  • 无论采用哪种方案,限制并发连接数是最有效的预防手段:比如将同时下载的文件数控制在15-18个(留足余量),避免触发服务器的421限制。

内容的提问来源于stack exchange,提问作者truf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 01:57:07