c++ - QNetworkAccessManager,重置 TCP 连接

标签 c++ qt sockets networking tcp

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

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

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

最佳答案

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

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

关于c++ - QNetworkAccessManager,重置 TCP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38379848/

相关文章:

python - 在 python 中捕获 "socket.timeout The read operation timed out"

python - swig c++ 到 python 通过引用返回 unsigned char*

c++ - a/c++代码的编译到执行的过程是怎样的?

c++ - 处理点击 3d 对象 opengl

linux - Qt 应用程序中的媒体播放只有在以 root 身份执行时才有可能

c++ - 为什么我的 Q_INVOKABLE 方法返回的自定义 QObject 在我的 QML 中未定义?

c++ - OpenCV/Tesseract:如何用 GDI+ 位图替换 libpng、libtiff 等(通过 GDI+ 加载到 cv::Mat)

c++ - 使用 boost 进行半无限积分

java - 是否可以将换行符写入套接字的 OutputStream?

java - Android - 读取tcp套接字数组字节