我正在尝试与虚拟现实软件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上阅读了很多主题,但这两个更有用: Topic 1 Topic 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();
}
我的问题: 为什么会发生这种情况以及如何避免这种情况?如何改进?