我有一些类可以干扰 HTTP 服务器。
这是有意义的代码部分:
const QString someClass::BASEURL = QString("http://127.0.0.1:8000/?");
someClass::someClass():
manager(new QNetworkAccessManager(this))
{
}
QNetworkReply *someClass::run(QString request)
{
qDebug() << request;
QEventLoop loop;
QObject::connect(manager, SIGNAL(finished(QNetworkReply*)), &loop, SLOT(quit()));
QNetworkReply *res = manager->get(QNetworkRequest(QUrl(BASEURL + request)));
loop.exec();
return res;
}
当我调用方法 run() 时,有时(不是每次)有两个相同的 GET 请求
(我用 tcpdump 查看)。 qDebug() 执行 1 次。
我的代码有错误吗?我看不到任何可能的解释。
更新:
经过一些 tcpdump 输出研究。
在第二个请求之后,它发送带有 RST 标志的数据包作为对 FIN 的答复。
但我仍然看不出触发问题和不触发问题的 TCP 流有什么区别。
F.e.这是wireshark的输出。Stream 8 http://pastebin.com/HchVTcC8顺利。直播11 http://pastebin.com/T1WyJV5K被复制为直播12 http://pastebin.com/VSsq3AXF.
我被这个问题困住了。也许这是服务器大小的一些协议错误,我不确定。或者可能是 QNetworkAccessManager 中的错误。
您是否尝试过重写代码以使其更加异步,而无需在本地范围内使用 QEventLoop?您的代码对我来说看起来不错,但是您在对请求进行排队以在本地范围内处理和使用 QEventLoop 的方式中可能会遇到一些奇怪的 QT 错误。我通常按以下方式使用 QNetworkAccessManager 发送 GET 和 POST 请求:
void someClass::run(QString request)
{
qDebug() << request;
QObject::connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(on_request_complete(QNetworkReply*)));
QNetworkReply *res = manager->get(QNetworkRequest(QUrl(BASEURL + request)));
}
void someClass::on_request_complete(QNetworkReply* response)
{
// Do stuff with your response here
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)