我有一个小问题,我将在 qt 5.1.0 中为连接 http 服务器制作一个客户端程序我通过 post 方法在 json 文件中发送请愿书,它们工作中涉及的主要方法的代码如下:
void HttpClient::sendJsonDocument(const QString typeId,const QString idClient)
{
QNetworkAccessManager *clientHttp=new QNetworkAccessManager();
clientHttp->clearAccessCache();
QUrl url("192.160.5.1:8383); //server adress
JsonManagment json;
QByteArray data;
data.clear();
data=("\r\n");
data.append(json.BuildJsonQuery(typeId,idClient));
data.append("\r\n");
QByteArray postDataSize = QByteArray::number(data.size());
QNetworkRequest request;
request.setUrl(url);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
request.setRawHeader("Content-Length",postDataSize);
SetHeaders(request, data);
QList <QByteArray> headers=request.rawHeaderList();
QList<QByteArray>::iterator i;
QObject::connect(clientHttp,SIGNAL(finished(QNetworkReply *)), this, SLOT(replyFinish(QNetworkReply *)));
QNetworkReply *serverReplaying=clientHttp->post(request,data);
QEventLoop eloop;
QObject::connect(serverReplaying,SIGNAL(finished()), &eloop, SLOT(quit()),Qt::UniqueConnection);
eloop.exec( QEventLoop::ExcludeUserInputEvents );
}
好吧,问题是当我的程序执行一个帖子时,显然帖子没有正确执行,因为与一个名为poster的firefox的补充相比,数据包的内容(以及它们的数量是不同的),并且偶尔服务器会正确响应,我的程序连 3 次都无法阅读回复并重新发送帖子请愿书,只会收到错误关闭连接。我的插槽replyFinished的代码是下一个:
void HttpClient::replyFinish(QNetworkReply *serverReplayingy)
{
qDebug()<<"one step more";
if(serverReplayingy->error() != QNetworkReply::NoError)
{
qDebug()<<"error:"<<serverReplayingy->errorString();
QByteArray responseData = serverReplayingy->readAll();
}
else
{
JsonManagment jsonFile;
QByteArray responseData = serverReplayingy->readAll();
jsonFile.CreateJsonFile(responseData);
QString qstr(responseData);
qDebug()<<qstr;
}
return;
}
我相信服务器是正确的(因为他可以回复补充海报),我会说两个细节,第一个当我尝试检查事件循环是否正在运行时,总是给出 false,第二个,我能得到的唯一方法当我剪切 jsonfile 时,只有 1 次传输和接收(1 次请愿),但我立即从服务器收到错误。