У меня есть НЕБОЛЬШАЯ проблема, я сделаю клиентскую программу для подключения http-сервера в qt 5.1.0. Я отправляю петицию в файле json методом post, код основных методов, участвующих в их работе, следующий:
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 );
}
Что ж, проблема в том, что когда моя программа выполняет сообщение, по-видимому, сообщение выполняется неправильно, потому что по сравнению с дополнением firefox, называемым poster, содержимое пакетов (и их количество различны), и иногда сервер отвечает правильно. , моя программа не может прочитать ответ и повторно отправить почтовую петицию даже 3 раза, и только получает сообщение об ошибке Закрытое соединение. Код моего слота answerFinished следующий:
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;
}
Я считаю, что сервер правильный (потому что он может ответить на дополняющий постер), и я скажу две детали: первая, когда я пытаюсь проверить, работает ли цикл событий, всегда дает ложь, а вторая, единственный способ, которым я могу получить только 1 передача и прием (1 петиция) были, когда я вырезал файл json, но я сразу получаю сообщение об ошибке с сервера.