【问题标题】:QNetworkAccessManager, reset TCP connectionQNetworkAccessManager,重置 TCP 连接
【发布时间】:2016-07-15 02:04:51
【问题描述】:

我正在 Qt 中编写一个程序来向嵌入式设备发出 HTTP 请求,并使用 QNetworkAccessManager 来执行此操作,它运行良好,但以下情况除外。

嵌入式设备只接受 1 个 TCP 连接。如果在 TCP 连接处于活动状态时连接断开(电缆拔出),则设备将进入挂起状态。它不知道连接已断开,无法再接受。

有没有办法手动重置 QNetworkAccessManager,这样我就可以在每个请求上强制建立一个新连接,并在请求完成后优雅地关闭连接?

【问题讨论】:

    标签: c++ qt sockets networking tcp


    【解决方案1】:

    在回复中,检查是否设置了QNetworkRequest::HttpPipeliningWasUsedAttribute 属性。如果是,那么这就是您的问题:您必须修改您的请求以在 QNetworkRequest::HttpPipeliningAllowedAttribute 上强制使用错误值。如果没有流水线,每个请求都会在单独的连接上发送。

    请注意,QNetworkAccessManager 可以并行发起多个请求。您必须确保只允许一个未完成的请求,并且只在前一个请求完成后才提出一个新请求。

    【讨论】:

    • 默认情况下禁用流水线。不知道当流水线关闭的时候,请求完成后TCP连接会关闭吗?
    • 我发现的一种解决方法是在每次回复后重新创建 QNetworkAccessManager。但是,这似乎有点草率。
    猜你喜欢
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多