2016-07-14 120 views
1

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

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

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

回答

1

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

请注意,QNetworkAccessManager可以并行启动多个请求。您必须确保您只允许一个请求处于未完成状态,并且只有在前一个请求完成时才发出一个新请求。

+0

管道被禁用,默认。你知道当流水线被禁用时,请求完成时TCP连接是否关闭? – jossgray

+0

我发现的解决方法是在每次回复后重新创建QNetworkAccessManager。但是,这似乎有点令人费解。 – jossgray