QNetworkAccessManager 错误代码 99;仅在某些系统上....
QNetworkAccessManager Error Code 99; Only on Some Systems…
使用 QNetworkAccessManager 时,我收到一个奇怪的错误,该错误只发生在某些系统上,而不会出现在其他系统上。
代码见下文。下面的测试连接到基于 SSL 的站点。
我在客户端系统上有OpenSSL DLL(libeay32.dll和ssleay32.dll),与我的应用程序位于同一目录中,但仍然发生错误。
错误代码为 (99) – 未知网络错误。
是什么导致某些系统上出现此错误,而在其他系统上则不然?
我该怎么做才能解决?
谢谢你的时间。
在应用程序的构造函数中: MainNetConnector = new QNetworkAccessManager(this);
启动测试的函数:
void QTBasicWidget::performNetworkTest() {
QMessageBox::StandardButton RequestNetworkTest;
RequestNetworkTest = QMessageBox::information(this, "Would you like to initiate a network test?",
"Would you like to perform a network test?nnThe application will test the network for connectivity to and from the licensing server specified.nnResults will be displayed in the 'Log' tab.",
QMessageBox::Yes | QMessageBox::No);
QNetworkRequest req;
QByteArray postData;
QNetworkReply* reply;
switch (RequestNetworkTest) {
case QMessageBox::Yes:
LoggingWidget->logText(tr("Beginning the network test."));
if (UseSecuredURL) {
req.setUrl(QUrl(SecureURL + "testconnection.php"));
LoggingWidget->logText(tr("Connecting to secure URL: ") + SecureURL + tr("testconnection.php"));
}
else {
req.setUrl(QUrl(UnsecureURL + "testconnection.php"));
LoggingWidget->logText(tr("Connecting to unsecure URL: ") + UnsecureURL + tr("testconnection.php"));
}
MainNetConnector->setCookieJar(new QNetworkCookieJar(MainNetConnector));
LoggingWidget->logText(tr("Cookie jar prepared for data to send."));
reply = MainNetConnector->post(req, postData);
LoggingWidget->logText(tr("Data sent."));
connect(reply, &QNetworkReply::finished, this, &QTBasicWidget::processTestResults);
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),
this, SLOT(networkError(QNetworkReply::NetworkError)));
if (TestingTimer) {
TestingTimer->stop();
TestingTimer->deleteLater();
TestingTimer = NULL;
}
TestingTimer = new QTimer(this);
connect(TestingTimer, SIGNAL(timeout()), this, SLOT(onDelayedNetworkTestReponse()));
TestingTimer->start(5000);
break;
case QMessageBox::No:
QMessageBox::information(this, "Test cancelled.",
"Network test cancelled.",
QMessageBox::Ok);
break;
default:
QMessageBox::information(this, "Test cancelled.",
"Network test cancelled.",
QMessageBox::Ok);
break;
}
}
接收测试结果的函数:
void QTBasicWidget::processTestResults() {
if (TestingTimer) {
TestingTimer->stop();
TestingTimer->deleteLater();
TestingTimer = NULL;
}
LoggingWidget->logText(tr("Reply received."));
auto reply = qobject_cast< QNetworkReply *>(sender());
QByteArray bytes = reply->readAll();
QString str = QString::fromUtf8(bytes.data(), bytes.size());
LoggingWidget->logText(tr("Raw data from reply: ") + str);
GLint statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
LoggingWidget->logText(tr("Reply status code: ") + QString::number(statusCode));
if (statusCode == 200) {
QMessageBox::StandardButton NetworkTestResults;
NetworkTestResults = QMessageBox::information(this, "Test succeeded!.",
"Network test succeeded.",
QMessageBox::Ok);
}
else {
QMessageBox::StandardButton NetworkTestFailed;
NetworkTestFailed = QMessageBox::critical(this, "Test failed!.",
"Network test failed.",
QMessageBox::Ok);
}
}
和错误处理功能: void QTBasicWidget::networkError(QNetworkReply::NetworkError err) {
if (CurrentlyDebugging) {
LoggingWidget->logText(tr("Network error. Error code is: ") + QString::number(err));
}
QMessageBox::StandardButton CriticalMessageBox;
CriticalMessageBox = QMessageBox::critical(this, tr("Licensing Server Error"),
tr("Specific error code was (") + QString::number(err) + tr(")"), QMessageBox::Ok);
}
http://doc.qt.io/qt-5/qtnetwork-downloadmanager-example.html
http://doc.qt.io/qt-5/qtnetwork-download-example.html
看起来您可能也应该检查SSL错误。
希望这是一个一致的错误,您可以找到正在发生的事情。 我最好的猜测是它与SSL有关。 下载程序示例演示如何查看这些错误。
#ifndef QT_NO_SSL
connect(reply, SIGNAL(sslErrors(QList<QSslError>)), SLOT(sslErrors(QList<QSslError>)));
#endif
// ...
void DownloadManager::sslErrors(const QList<QSslError> &sslErrors)
{
#ifndef QT_NO_SSL
foreach (const QSslError &error, sslErrors)
fprintf(stderr, "SSL error: %sn", qPrintable(error.errorString()));
#else
Q_UNUSED(sslErrors);
#endif
}
希望有帮助。
使用 "C:\Qt\MaintenanceTool.exe"添加或删除组件在Qt中>开发人员和设计器工具> OpenSSL x.y.z Toolkit
从以下目录复制所有 DLL,在 EXE 文件的目录中。C:\Qt\Tools\OpenSSL\Win_x64\bin
- 错误处理.将系统错误代码映射到泛型
- 为什么我在使用void函数时得到错误代码C2276
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- 逻辑运算符上出现错误代码 a')'
- 'val' Arduino 错误代码之前的预期'('
- 我在贪吃蛇游戏中收到了错误代码 -1073741571
- 根据 GetLastError 直接写入磁盘会导致错误代码 5
- 系统错误:程序无法启动,因为您的计算机中缺少MSVCP140D.DLL。尝试重新安装该程序以解决此问题
- 当我选择大于 720 的矩阵大小时,程序退出并显示错误代码.可能是什么原因?
- 创建进程 API 失败,在窗口 122 上出现错误代码 10
- 使用另一个函数调用一个函数(都在类中)时出现问题.没有错误代码C++
- 当命令失败时,gzip 会在 C++ 中返回错误代码吗?
- 从 C++ 调用 cURL 命令会返回意外的错误代码,如 1792 和 6656
- WSALookupServiceBegin() 上的错误代码 10022(无效的 arugment)
- C++ Schannel POST 400 错误代码错误请求
- openCL-创建子缓冲区返回错误代码13
- C++ Mingw32 创建进程() 失败,错误代码 2:系统找不到指定的文件
- <system_error> 类别和标准/系统错误代码
- QNetworkAccessManager 错误代码 99;仅在某些系统上....
- 用c++运行一个进程,过滤输出,获取结果代码,同时获取系统错误