Мне нужно проверить подключение к Интернету, если я получаю ошибку сокета. Я так и поступаю,
void Client::socketError(QAbstractSocket::SocketError socketError) {
HttpPost("https://www.google.co.in/");
}
void Client::HttpPost(QString URL ) {
QNetworkRequest request = QNetworkRequest();
request.setUrl(QUrl(URL));
QNetworkAccessManager *mNetworkAccessManager = new QNetworkAccessManager(this);
bool result = connect(mNetworkAccessManager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(HttpResponse(QNetworkReply *)));
mNetworkAccessManager->get(request);
qDebug() << "::: Client.cpp Request made to Service :::";
}
void Client::HttpResponse(QNetworkReply* reply) {
if (reply->error() == QNetworkReply::NoError) {
qDebug() << "\n Internet Ok **********";
} else {
qDebug() << "\n No Internet **********" << reply->errorString();
showDialog("No Inernet");
}
}
И я подключаюсь к сигналам и слотам, например
connect(socket, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(socketError(QAbstractSocket::SocketError)));
Но иногда я получаю сообщение «Нет интернет-диалога», даже если Wi-Fi доступен. Почему ?
Способ 2:
// this method will return true If Net is available false other wise
// but even this is return false some times even Wi fi signal is Available
bool Client::isNetworkAvailable() {
bool isFound = false;
QNetworkConfigurationManager netMgr;
QList<QNetworkConfiguration> mNetList = netMgr.allConfigurations(QNetworkConfiguration::Active);
if (mNetList.count() > 0) {
if (netMgr.isOnline()) {
isFound = true;
}
}
qDebug() << "\n ************** isNetworkAvailable:::" << isFound;
return isFound;
}
Есть ли проблема в моем коде?
2 ответа
Фрагмент проверки сети кажется слишком сложным. Вы можете просто вызвать следующий метод:
bool QNetworkConfigurationManager :: isOnline () const
Возвращает true, если считается, что система подключена к другому устройству через активный сетевой интерфейс; в противном случае возвращает false.
Если это не работает для кого-то, это, скорее всего, означает, что подключение к Интернету ненадежное, особенно если оно не работает случайным образом.
Что о
NetworkAccessibility QNetworkAccessManager::networkAccessible ()
networkAccessible: Доступность сети
Это свойство указывает, доступна ли сеть в настоящее время через этот диспетчер доступа к сети.
Если сеть недоступна, диспетчер доступа к сети не будет обрабатывать новые сетевые запросы, все такие запросы завершатся ошибкой. Запросы с URL-адресами со схемой file: // будут обрабатываться.
Похожие вопросы
Новые вопросы
c++
C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который должен быть) скомпилирован с помощью компилятора C ++. Используйте тег для конкретной версии для вопросов, связанных с конкретной версией стандарта [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] или [C ++ 23] и т. Д. .