Название: Как программно проверить есть подключение к интернет? Отправлено: virtual_root от Апрель 27, 2012, 20:51 Ещё раз здравствуйте) Ребята, может кто-то уже занимался подобным? Мне в моей программе нужно чтобы когда нет соединения с интернет иконка в трее менялась. Я использовала следуйщий способ:
Код: QNetworkConfigurationManager config; Далее я сделала таймер и по сигналу timeout я в слоте выполняю этот код. Timeout у меня каждые 2 секунды. Всё работает, картинка меняется, но не так быстро, как например в скайп. Т.е. я отключаюсь от интернет и моё приложение только секунд через 5-6 меняет картинку. А хотелось бы как в скайп, он как-то сразу меняет картинку.) Может кто знает решение? Название: Re: Как программно проверить есть подключение к интернет? Отправлено: alexis031182 от Апрель 27, 2012, 21:03 Так у QNetworkConfigurationManager есть сигнал onlineStateChanged() :)
Название: Re: Как программно проверить есть подключение к интернет? Отправлено: virtual_root от Апрель 27, 2012, 21:15 А как бы мне этот сигнал использовать? Когда он срабатывает? Я соединила его со своим объектом, но сам сигнал не вызывается...
Не могли бы вы привести пример кода, если конечно возможно. Название: Re: Как программно проверить есть подключение к интернет? Отправлено: alexis031182 от Апрель 27, 2012, 22:00 Очень странно, но у меня тоже не работает. Не работает и кьютишный пример BearerMonitor - всегда online, сигнал не вызывается :(
Название: Re: Как программно проверить есть подключение к интернет? Отправлено: virtual_root от Апрель 27, 2012, 22:07 Да, странно. У меня мой код который я выше писала работает только под windows под ubuntu тоже всегда onlain...
Название: Re: Как программно проверить есть подключение к интернет? Отправлено: Alex_C от Апрель 27, 2012, 22:11 Не знаю как сейчас, может что уже новое придумали...
Но в свое время данный вопрос меня интересовал. Для начала давайте разберемся - что значит подключен к интернету, или нет? Однозначно можно определить только подключен компьютер к сети (не к интернету, а к комп. сети!) или нет (если не подключен, то при запросе его ip будет выдаваться 127.0.0.1). Ситуация - порушились часть каналов у Вашего провайдера - google - не доступен, yandex - доступен. Это как - интернет есть или нет? Скайп проверяет работоспособность не итернета, скажем так, а доступность своего сервера пингуя его. Как вариант - пингуйте www.google.ru и www.yandex.ru, перед этим проверяя, что Ваш ip не 127.0.0.1 Название: Re: Как программно проверить есть подключение к интернет? Отправлено: alexis031182 от Апрель 27, 2012, 22:12 Да, странно. У меня мой код который я выше писала работает только под windows под ubuntu тоже всегда onlain... Вот-вот, у меня Mint, но по сути та же Ubuntu. Попробовал ещё QNetworkAccessManager (там похожий сигнал есть) - аналогично, не пашет.Тогда наверное только с таймером проверять, больше вроде нет ничего, что могло бы отправить сигнал. Ещё есть QNetworkInterface, но у него только функция проверки через флаг QNetworkInterface::IsUp Название: Re: Как программно проверить есть подключение к интернет? Отправлено: alexis031182 от Апрель 27, 2012, 22:15 Не знаю как сейчас, может что уже новое придумали... Да, точно, только вот как раз хотелось бы, чтобы localhost при определении активности сети из списка исключался. А тут походу нет. Кабель выдергиваю, и всё равно онлайн.Но в свое время данный вопрос меня интересовал. Для начала давайте разберемся - что значит подключен к интернету, или нет? Однозначно можно определить только подключен компьютер к сети (не к интернету, а к комп. сети!) или нет (если не подключен, то при запросе его ip будет выдаваться 127.0.0.1). Ситуация - порушились часть каналов у Вашего провайдера - google - не доступен, yandex - доступен. Это как - интернет есть или нет? Скайп проверяет работоспособность не итернета, скажем так, а доступность своего сервера пингуя его. Придётся постоянно пинговать, а ради смены иконки - это наверное не слишком удачно.Как вариант - пингуйте www.google.ru и www.yandex.ru, перед этим проверяя, что Ваш ip не 127.0.0.1 Название: Re: Как программно проверить есть подключение к интернет? Отправлено: Alex_C от Апрель 27, 2012, 22:22 Кабель выдергиваю, и всё равно онлайн. Такая ситуация как бы не правильна - при выдергивании всех (заметте - всех) сетей, адрес должен стать 127.0.0.1 - если такого не происходит - то скорее всего "не все выдернули". На счет пинговать - это на самом деле самая правильная проверка. Другое дело, что таже аська или скайп пингует свои сервера, а не проверяет "есть ли инет" - а это, согласитесь, две большие разницы. Название: Re: Как программно проверить есть подключение к интернет? Отправлено: alexis031182 от Апрель 27, 2012, 22:34 Такая ситуация как бы не правильна - при выдергивании всех (заметте - всех) сетей, адрес должен стать 127.0.0.1 - если такого не происходит - то скорее всего "не все выдернули". Выдернул всё, и адрес конечно остался только 127.0.0.1 Я как раз и хотел сказать, что localhost, по идее, должен игнорироваться самой Qt при определении доступности сети. А иначе, я должен тогда карту отключить получается, чтобы на оффлайн перевести. Скорее всего этот функционал в приоритете на мобильные платформы делался, там может быть такой двусмысленности не возникает.На счет пинговать - это на самом деле самая правильная проверка. Другое дело, что таже аська или скайп пингует свои сервера, а не проверяет "есть ли инет" - а это, согласитесь, две большие разницы. Этим двум товарищам это жизненно необходимо, поэтому и затраты на пинг получаются адекватны.Название: Re: Как программно проверить есть подключение к интернет? Отправлено: virtual_root от Апрель 27, 2012, 23:03 Ребята спасибо за ответы.
Название: Re: Как программно проверить есть подключение к интернет? Отправлено: Bepec от Апрель 28, 2012, 06:52 Кхм. А никому в голову не приходило, что имеются и эмуляторы на компьютерах? И что 127.0.0.1 - совсем не верный способ определения, есть сеть или нет?
Название: Re: Как программно проверить есть подключен Отправлено: Alex_C от Апрель 28, 2012, 08:02 Кхм. А никому в голову не приходило, что имеются и эмуляторы на компьютерах? И что 127.0.0.1 - совсем не верный способ определения, есть сеть или нет? Моя фраза о том "что не все выдернули" - именно к этому и относится. По этому она и в кавычках. Даже такой вот пример - модем Мегафоновский - если воткнут, но денег на счете нет, но адрес то есть, а интернета нет :) По этому , как мне кажется, если есть дейcтвительно необходимость проверки интернета - пинговать допустим 3 наиболее вероятно работающих сервера, типа google. Вообще же рекомендую погуглить - ссылок на эту тему много найдете. |