Russian Qt Forum

Qt => Работа с сетью => Тема начата: Alex_M от Октябрь 30, 2009, 16:44



Название: Проверка наличия подключения по сети
Отправлено: Alex_M от Октябрь 30, 2009, 16:44
Здравствуйте! Помогите, пожалуйста со следующей задачей. Необходимо постоянно проверять наличие подключения по Локальной сети и наличие сети Интернет на компьютере пользователя (т.е. проверка на доступность той или иной сети). Все это должно проводится таким образом, что как только пользователь отключит сеть в процессе работы с приложением, некоторые опции программы становились бы для него недоступными. Как это можно организовать?


Название: Re: Проверка наличия подключения по сети
Отправлено: Zmeishe от Октябрь 30, 2009, 19:47
В процессе работы с каким приложением пользователь отключит сеть?
С приложением Qt или вообще любым?


Название: Re: Проверка наличия подключения по сети
Отправлено: BRE от Октябрь 30, 2009, 20:57
Можно попробовать периодически дергать метод:
QList<QNetworkInterface> QNetworkInterface::allInterfaces ()   [static]
для определения какие интерфейсы присутствуют и какое у них состояние.

Думаю что есть платформозависимые решения, когда системные средства посылают сообщение при активации/деактивации интерфейса. Можно попробовать использовать их.


Название: Re: Проверка наличия подключения по сети
Отправлено: Alex_M от Ноябрь 02, 2009, 16:50
Не совсем понятно, как использовать QNetworkInterface::allInterfaces() ? Возвращает более 10 000 записей в QList. Как определять, когда есть сеть, а когда нет?


Название: Re: Проверка наличия подключения по сети
Отправлено: BRE от Ноябрь 02, 2009, 16:54
Не совсем понятно, как использовать QNetworkInterface::allInterfaces() ? Возвращает более 10 000 записей в QList. Как определять, когда есть сеть, а когда нет?
Да?!  :o
Он должен и, как минимум под linux, возвращает доступные интерфейсы. Конкретно у меня их 3: eth0, lo, ppp0.
Код
C++ (Qt)
#include <QApplication>
#include <QNetworkInterface>
#include <QDebug>
 
int main( int argc, char *argv[] )
{
       QCoreApplication a( argc, argv );
 
       QList<QNetworkInterface> iface = QNetworkInterface::allInterfaces();
       qDebug() << iface;
 
       return 0;
}
 

Ты его под какой платформой пробуешь?


Название: Re: Проверка наличия подключения по сети
Отправлено: Alex_M от Ноябрь 02, 2009, 17:13
Под Windows использую.  Попробую разобраться в чем дело.


Название: Re: Проверка наличия подключения по сети
Отправлено: Alex_M от Ноябрь 02, 2009, 17:15
Еще один вопросик, а что за сокращения eth0, lo, ppp0?  ;D


Название: Re: Проверка наличия подключения по сети
Отправлено: BRE от Ноябрь 02, 2009, 17:17
Еще один вопросик, а что за сокращения eth0, lo, ppp0?  ;D
Имена интерфейсов.
Для венды можно использовать QString QNetworkInterface::humanReadableName () const для получения "человеческих" имен.  :)


Название: Re: Проверка наличия подключения по сети
Отправлено: Alex_M от Ноябрь 02, 2009, 17:23
Ясно. Спасибо за помощь.
 


Название: Re: Проверка наличия подключения по сети
Отправлено: Ruzzz от Ноябрь 02, 2009, 19:13
Проверять на доступ к инету лучше пингованием какого-либо популярного ресурса, или рандомно нескольких.


Название: Re: Проверка наличия подключения по сети
Отправлено: BRE от Ноябрь 02, 2009, 19:33
Проверять на доступ к инету лучше пингованием какого-либо популярного ресурса, или рандомно нескольких.
Можно свой DNS-сервер пинговать.