Проверка сетевого подключения с использованием Qt 4.4 - PullRequest
6 голосов
/ 19 марта 2010

У меня есть приложение, которое запускает инструмент, требующий подключения к сети. Теперь моя цель - проверить, есть ли у пользователя сетевое соединение, если у него его нет, я могу сразу отобразить ошибку, не переходя дальше. Если он имеет, он может продолжить работу с моим заявлением. Поэтому моя основная задача - проверить, есть ли у пользователя подключение к сети или нет. Как я могу достичь через Qt 4.4? Я использую Windows XP.

Ответы [ 3 ]

10 голосов
/ 19 марта 2010

этот код поможет вам.

#include <QtCore/QCoreApplication>
#include <QtNetwork/QNetworkInterface>

bool isConnectedToNetwork()
{
    QList<QNetworkInterface> ifaces = QNetworkInterface::allInterfaces();
    bool result = false;

    for (int i = 0; i < ifaces.count(); i++)
    {
        QNetworkInterface iface = ifaces.at(i);
        if ( iface.flags().testFlag(QNetworkInterface::IsUp)
             && !iface.flags().testFlag(QNetworkInterface::IsLoopBack) )
        {

#ifdef DEBUG
            // details of connection
            qDebug() << "name:" << iface.name() << endl
                    << "ip addresses:" << endl
                    << "mac:" << iface.hardwareAddress() << endl;
#endif

            // this loop is important
            for (int j=0; j<iface.addressEntries().count(); j++)
            {
#ifdef DEBUG
                qDebug() << iface.addressEntries().at(j).ip().toString()
                        << " / " << iface.addressEntries().at(j).netmask().toString() << endl;
#endif

                // we have an interface that is up, and has an ip address
                // therefore the link is present

                // we will only enable this check on first positive,
                // all later results are incorrect
                if (result == false)
                    result = true;
            }
        }

    }

    return result;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QTextStream output(stdout);


    output << endl << "Connection Status: " << ((isConnectedToNetwork())?"Connected":"Disconnected") << endl;


    return a.exec();
}
1 голос
/ 09 сентября 2010

В Qt 4.7 вы можете использовать QNetworkConfiguration для проверки соединений и даже их запуска, например, на Symbian.

1 голос
/ 19 марта 2010

Я предполагаю, что под "сетевым подключением" вы подразумеваете "подключение к Интернету", т. Е. Вам нет дела до локальной сети или некоторых специальных сетей между вашим настольным компьютером и мобильным телефоном.

Самый простой способ - просто подключиться к интернет-сервису, в котором нуждается ваше приложение, и позволить ОС обрабатывать сетевой запрос. Если вы получили ответ, соединение установлено, если время ожидания истекло, соединения нет.

Вы можете проверить состояние сетевого интерфейса через QNetworkInterface :: flags (), но это не дает вам информацию о сети, к которой подключен интерфейс: интерфейс может быть включен, но подключен только к локальной сети без доступа в Интернет .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...