Russian Qt Forum
Ноябрь 23, 2024, 11:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проверка наличия подключения по сети  (Прочитано 9171 раз)
Alex_M
Гость
« : Октябрь 30, 2009, 16:44 »

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

В процессе работы с каким приложением пользователь отключит сеть?
С приложением Qt или вообще любым?
Записан
BRE
Гость
« Ответ #2 : Октябрь 30, 2009, 20:57 »

Можно попробовать периодически дергать метод:
QList<QNetworkInterface> QNetworkInterface::allInterfaces ()   [static]
для определения какие интерфейсы присутствуют и какое у них состояние.

Думаю что есть платформозависимые решения, когда системные средства посылают сообщение при активации/деактивации интерфейса. Можно попробовать использовать их.
Записан
Alex_M
Гость
« Ответ #3 : Ноябрь 02, 2009, 16:50 »

Не совсем понятно, как использовать QNetworkInterface::allInterfaces() ? Возвращает более 10 000 записей в QList. Как определять, когда есть сеть, а когда нет?
Записан
BRE
Гость
« Ответ #4 : Ноябрь 02, 2009, 16:54 »

Не совсем понятно, как использовать QNetworkInterface::allInterfaces() ? Возвращает более 10 000 записей в QList. Как определять, когда есть сеть, а когда нет?
Да?!  Шокированный
Он должен и, как минимум под 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;
}
 

Ты его под какой платформой пробуешь?
« Последнее редактирование: Ноябрь 02, 2009, 16:56 от BRE » Записан
Alex_M
Гость
« Ответ #5 : Ноябрь 02, 2009, 17:13 »

Под Windows использую.  Попробую разобраться в чем дело.
Записан
Alex_M
Гость
« Ответ #6 : Ноябрь 02, 2009, 17:15 »

Еще один вопросик, а что за сокращения eth0, lo, ppp0?  Смеющийся
Записан
BRE
Гость
« Ответ #7 : Ноябрь 02, 2009, 17:17 »

Еще один вопросик, а что за сокращения eth0, lo, ppp0?  Смеющийся
Имена интерфейсов.
Для венды можно использовать QString QNetworkInterface::humanReadableName () const для получения "человеческих" имен.  Улыбающийся
Записан
Alex_M
Гость
« Ответ #8 : Ноябрь 02, 2009, 17:23 »

Ясно. Спасибо за помощь.
 
Записан
Ruzzz
Гость
« Ответ #9 : Ноябрь 02, 2009, 19:13 »

Проверять на доступ к инету лучше пингованием какого-либо популярного ресурса, или рандомно нескольких.
Записан
BRE
Гость
« Ответ #10 : Ноябрь 02, 2009, 19:33 »

Проверять на доступ к инету лучше пингованием какого-либо популярного ресурса, или рандомно нескольких.
Можно свой DNS-сервер пинговать.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.112 секунд. Запросов: 21.