Как определить состояние интернет-соединения с Qt 5.4 на OS X Yosemite 10.10.3?

Я пытаюсь проверить состояние подключения к Интернету с помощью Qt 5.4 на OS X Yosemite 10.10.3, но каждый раз, когда я запускаю код, результат подключается, хотя я ни к чему не подключен.

bool NetworkAccessManager::currentConnectivityStatus()
{
    QNetworkAccessManager *namanager = new QNetworkAccessManager(this);
    switch (namanager->networkAccessible()) {
    case QNetworkAccessManager::UnknownAccessibility:
        kdebug() << Q_FUNC_INFO << "QNetworkAccessManager::UnknownAccessibility";
        break;
    case QNetworkAccessManager::NotAccessible:
        kdebug() << Q_FUNC_INFO << "QNetworkAccessManager::NotAccessible";
        break;
    case QNetworkAccessManager::Accessible:
        kdebug() << Q_FUNC_INFO << "QNetworkAccessManager::Accessible";
        break;
    default:
        break;
    }

    QNetworkConfigurationManager manager;
        kdebug()<< Q_FUNC_INFO << " network connection " << manager.isOnline();

    QNetworkConfiguration cfg = manager.defaultConfiguration();
    QNetworkSession *session = new QNetworkSession(cfg);
    session->open();
    session->waitForOpened();

    if(session->isOpen())
    {
        switch (session->state()) {
        case QNetworkSession::Connected:
            kdebug() << Q_FUNC_INFO << "QNetworkSession::Connected";
            break;
        case QNetworkSession::Disconnected:
            kdebug() << Q_FUNC_INFO << "QNetworkSession::disconnect";
            break;
        default:
            break;
        }
    }
}

И вот результат для всего вышеперечисленного, когда я отключил все

DEBUG 2015-04-25T16:00:59.560 bool NetworkAccessManager::currentConnectivityStatus() QNetworkAccessManager::Accessible 
DEBUG 2015-04-25T16:00:59.560 bool NetworkAccessManager::currentConnectivityStatus()  network connection OK  true 
DEBUG 2015-04-25T16:00:59.560 bool NetworkAccessManager::currentConnectivityStatus() QNetworkSession::Connected 

person Mohamed Elkassas    schedule 25.04.2015    source источник
comment
вы должны попытаться пропинговать внешний сервер.   -  person Daniel A. White    schedule 25.04.2015
comment
Я определяю статус подключения из NetworkReply к запросам, которые я делаю, но я искал другой способ определить его, не выполняя NetworkRequest.   -  person Mohamed Elkassas    schedule 03.05.2015


Ответы (1)


Эхо-запрос из программы C/C++ здесь описано, как пропинговать внешний сервер, реализовать это, и если он пингуется, затем возвращает true, а если нет, то false.

person Gamer Guy    schedule 25.04.2015