Мне нужно проверить подключение к Интернету, если я получаю ошибку сокета. Я так и поступаю,

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
Sharath 28 Дек 2013 в 11:07

2 ответа

Лучший ответ

Фрагмент проверки сети кажется слишком сложным. Вы можете просто вызвать следующий метод:

bool QNetworkConfigurationManager :: isOnline () const

Возвращает true, если считается, что система подключена к другому устройству через активный сетевой интерфейс; в противном случае возвращает false.

Если это не работает для кого-то, это, скорее всего, означает, что подключение к Интернету ненадежное, особенно если оно не работает случайным образом.

0
Community 20 Июн 2020 в 09:12

Что о

NetworkAccessibility QNetworkAccessManager::networkAccessible ()

networkAccessible: Доступность сети

Это свойство указывает, доступна ли сеть в настоящее время через этот диспетчер доступа к сети.

Если сеть недоступна, диспетчер доступа к сети не будет обрабатывать новые сетевые запросы, все такие запросы завершатся ошибкой. Запросы с URL-адресами со схемой file: // будут обрабатываться.

0
CAMOBAP 29 Мар 2015 в 17:49