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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как программно проверить есть подключение к интернет?  (Прочитано 8661 раз)
virtual_root
Гость
« : Апрель 27, 2012, 20:51 »

Ещё раз здравствуйте) Ребята, может кто-то уже занимался подобным? Мне в моей программе нужно чтобы когда нет соединения с интернет иконка в трее менялась. Я использовала следуйщий способ:
Код:
QNetworkConfigurationManager config;
if (config.isOnline())
        emit Onlain(true);
else
        emit Onlain(false);
   

Далее я сделала таймер и по сигналу timeout я в слоте выполняю этот код. Timeout у меня каждые 2 секунды.
Всё работает, картинка меняется, но не так быстро, как например в скайп. Т.е. я отключаюсь от интернет и моё приложение только секунд через 5-6 меняет картинку. А хотелось бы как в скайп, он как-то сразу меняет картинку.)
Может кто знает решение?
Записан
alexis031182
Гость
« Ответ #1 : Апрель 27, 2012, 21:03 »

Так у QNetworkConfigurationManager есть сигнал onlineStateChanged() Улыбающийся
Записан
virtual_root
Гость
« Ответ #2 : Апрель 27, 2012, 21:15 »

А как бы мне этот сигнал использовать? Когда он срабатывает? Я соединила его со своим объектом, но сам сигнал не вызывается...
Не могли бы вы привести пример кода, если конечно возможно.
« Последнее редактирование: Апрель 27, 2012, 21:24 от virtual_root » Записан
alexis031182
Гость
« Ответ #3 : Апрель 27, 2012, 22:00 »

Очень странно, но у меня тоже не работает. Не работает и кьютишный пример BearerMonitor - всегда online, сигнал не вызывается Грустный
Записан
virtual_root
Гость
« Ответ #4 : Апрель 27, 2012, 22:07 »

Да, странно. У меня мой код который я выше писала работает только под windows под ubuntu тоже всегда onlain...
Записан
Alex_C
Гость
« Ответ #5 : Апрель 27, 2012, 22:11 »

Не знаю как сейчас, может что уже новое придумали...
Но в свое время данный вопрос меня интересовал.
Для начала давайте разберемся - что значит подключен к интернету, или нет?
Однозначно можно определить только подключен компьютер к сети (не к интернету, а к комп. сети!) или нет (если не подключен, то при запросе его ip будет выдаваться 127.0.0.1).
Ситуация - порушились часть каналов у Вашего провайдера - google - не доступен, yandex - доступен. Это как - интернет есть или нет? Скайп проверяет работоспособность не итернета, скажем так, а доступность своего сервера пингуя его.
Как вариант - пингуйте www.google.ru и www.yandex.ru, перед этим проверяя, что Ваш ip не 127.0.0.1
Записан
alexis031182
Гость
« Ответ #6 : Апрель 27, 2012, 22:12 »

Да, странно. У меня мой код который я выше писала работает только под windows под ubuntu тоже всегда onlain...
Вот-вот, у меня Mint, но по сути та же Ubuntu. Попробовал ещё QNetworkAccessManager (там похожий сигнал есть) - аналогично, не пашет.

Тогда наверное только с таймером проверять, больше вроде нет ничего, что могло бы отправить сигнал. Ещё есть QNetworkInterface, но у него только функция проверки через флаг QNetworkInterface::IsUp
Записан
alexis031182
Гость
« Ответ #7 : Апрель 27, 2012, 22:15 »

Не знаю как сейчас, может что уже новое придумали...
Но в свое время данный вопрос меня интересовал.
Для начала давайте разберемся - что значит подключен к интернету, или нет?
Однозначно можно определить только подключен компьютер к сети (не к интернету, а к комп. сети!) или нет (если не подключен, то при запросе его ip будет выдаваться 127.0.0.1).
Да, точно, только вот как раз хотелось бы, чтобы localhost при определении активности сети из списка исключался. А тут походу нет. Кабель выдергиваю, и всё равно онлайн.

Ситуация - порушились часть каналов у Вашего провайдера - google - не доступен, yandex - доступен. Это как - интернет есть или нет? Скайп проверяет работоспособность не итернета, скажем так, а доступность своего сервера пингуя его.
Как вариант - пингуйте www.google.ru и www.yandex.ru, перед этим проверяя, что Ваш ip не 127.0.0.1
Придётся постоянно пинговать, а ради смены иконки - это наверное не слишком удачно.
Записан
Alex_C
Гость
« Ответ #8 : Апрель 27, 2012, 22:22 »

Кабель выдергиваю, и всё равно онлайн.

Такая ситуация как бы не правильна - при выдергивании всех (заметте - всех) сетей, адрес должен стать 127.0.0.1 - если такого не происходит - то скорее всего "не все выдернули".
На счет пинговать -  это на самом деле самая правильная проверка. Другое дело, что таже аська или скайп пингует свои сервера, а не проверяет "есть ли инет" - а это, согласитесь, две большие разницы.
Записан
alexis031182
Гость
« Ответ #9 : Апрель 27, 2012, 22:34 »

Такая ситуация как бы не правильна - при выдергивании всех (заметте - всех) сетей, адрес должен стать 127.0.0.1 - если такого не происходит - то скорее всего "не все выдернули".
Выдернул всё, и адрес конечно остался только 127.0.0.1  Я как раз и хотел сказать, что localhost, по идее, должен игнорироваться самой Qt при определении доступности сети. А иначе, я должен тогда карту отключить получается, чтобы на оффлайн перевести. Скорее всего этот функционал в приоритете на мобильные платформы делался, там может быть такой двусмысленности не возникает.

На счет пинговать -  это на самом деле самая правильная проверка. Другое дело, что таже аська или скайп пингует свои сервера, а не проверяет "есть ли инет" - а это, согласитесь, две большие разницы.
Этим двум товарищам это жизненно необходимо, поэтому и затраты на пинг получаются адекватны.
Записан
virtual_root
Гость
« Ответ #10 : Апрель 27, 2012, 23:03 »

Ребята спасибо за ответы.
Записан
Bepec
Гость
« Ответ #11 : Апрель 28, 2012, 06:52 »

Кхм. А никому в голову не приходило, что имеются и эмуляторы на компьютерах? И что 127.0.0.1 - совсем не верный способ определения, есть сеть или нет?
Записан
Alex_C
Гость
« Ответ #12 : Апрель 28, 2012, 08:02 »

Кхм. А никому в голову не приходило, что имеются и эмуляторы на компьютерах? И что 127.0.0.1 - совсем не верный способ определения, есть сеть или нет?


Моя фраза о том "что не все выдернули" - именно к этому и относится. По этому она и в кавычках.
Даже такой вот пример - модем Мегафоновский - если воткнут, но денег на счете нет, но адрес то есть, а интернета нет Улыбающийся
По этому , как мне кажется, если есть дейcтвительно необходимость проверки интернета - пинговать допустим 3 наиболее вероятно работающих сервера, типа google.

Вообще же рекомендую погуглить - ссылок на эту тему много найдете.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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