我正在尝试与虚拟现实软件 NeuroVR 进行交互。该软件有一个 HTTP 服务器,用户可以通过它发送数据。可以通过 localhost:8888 访问服务器。如果通过浏览器访问,则会有一个表单来提交数据。数据类型是连接器名称和连接器值。因此,我创建了一个 Qt5.5 控制台程序来为 NeuroVR 发送数据。
我的问题: 我每 4 秒(或多或少)发送一次数据,我收到很多“RemoteHostClosedError”作为回复。在某些情况下,我的“HttpStatusCodeAttribute”等于 200,但成功率有时不到 50%。
我以为问题出在服务器上。因此,我通过访问 localhost:8888 的浏览器进行了测试,每 1(最多 2)秒发送数据。服务器接受了所有,这是完美的。
我的程序基于本教程:Sending a HTTP request using Qt 5 framework
我在 StackOverflow 上阅读了很多主题,但这两个更有用: 主题 1 主题 2
我的 QNetworkAccessManager 和 QNetworkRequest 是该类的属性。它们在构造函数中分配。
this->request = new QNetworkRequest(QUrl(this->nvrhost));
request->setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
this->manager = new QNetworkAccessManager(this);
connect(this->manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyNVR(QNetworkReply*)));
this->evLoop = new QEventLoop(this);
connect(this->manager,SIGNAL(finished(QNetworkReply*)),this->evLoop,SLOT(quit()));
此方法将请求发送到服务器:
void BciSocket::sendToNvr(QString data, QString connector)
{
QUrlQuery query;
query.addQueryItem("connectorID",connector);
query.addQueryItem("connectorValue",data);
this->manager->post((*request),query.toString(QUrl::FullyEncoded).toUtf8());
this->evLoop->exec();
}
我的问题: 为什么会发生这种情况以及如何避免它?我该如何改进它?