Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
eagl69
5 / 10 / 7
Регистрация: 12.10.2011
Сообщений: 506
1

Проверить соединение с интернетом

05.05.2015, 07:45. Просмотров 1556. Ответов 20
Метки нет (Все метки)

Здравствуйте!

Столкнулся с такой проблемой, приложение устанавливает коннект с сервером (они общающийся время от времени пакетами данных) все хорошо, но теперь вдруг пропадает нет, например зашли в подвал, потом вышли, сервер уже сбросил подключение т.к. поймал разрыв, а вот приложение все еще думает что сокет активен. Как проверить сокет не посылая контрольного пакета серверу? в таком случае? или вторая ситуация прошел звонок.... интернет пропал и восстановился....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2015, 07:45
Ответы с готовыми решениями:

Автоматическое управление 2G интернетом
Добрый день уважаемые форумчане! Мне нужно из программы управлять...

Каким способом вы определяете наличие соединения с интернетом
Знаю весь интернет кишит примерами... Но вот каким "хорошим", оптимальным...

Как выводить сообщение об отсутствии соединения с интернетом?
Здравствуйте! У меня в ViewPager загружаются 2 фрагмента. Каждый фрагмент...

Проверить есть ли соединение с интернетом
Мне нужна консольная программа которая проверяет есть ли соединение с...

Как проверить есть ли соединение с интернетом
Подскажите как на .Net проверить есть ли соедение с интернетом ?

20
Pablito
2731 / 2166 / 735
Регистрация: 12.05.2014
Сообщений: 7,575
Завершенные тесты: 1
05.05.2015, 08:28 2
вопрос навстречу - как проверить есть ли связь с сервером не посылая к нему пакет?
0
eagl69
5 / 10 / 7
Регистрация: 12.10.2011
Сообщений: 506
05.05.2015, 09:03  [ТС] 3
Э... так я об этом и спрашиваю... т.к. я плохо еще знаком с работой сокетов в андроиде. Сервер у меня написан на С++ там есть специальная функция которая определяет жив ли еще сокет или нет и даже не посылая пакета в течении нескольких сек определяет это. т.е. сервер у меня свой сокет уже закрыл, а вот в приложение еще об этом не знает.

Добавлено через 1 минуту
Постоянно посылать пакеты это не выход вроде для андроида, во первых это трафик, во вторых батарейка, в третьих ресурсы системы на сколько я понимаю.

Добавлено через 1 минуту
Я представляю так: нет пропал... сам телефон это видет т.к. пропадает значек о интернете... так вот есть ли какоенибуть уведомление об этом? или еще что чтобы приложение его могло увидеть?
0
Pablito
2731 / 2166 / 735
Регистрация: 12.05.2014
Сообщений: 7,575
Завершенные тесты: 1
05.05.2015, 09:26 4
Но ведь связи с сервером может не быть по другим причинам, например где-то по пути траффика авария.
Как тогда мониторить? Да никак, наверное.
Либо "пинговать" сервер, что не очень хорошо.
Либо таймаут для socket на стороне клиента. Там есть метод setSoTimeout()

Может конечно и есть другие методы, но я как сисадмин не могу представить как еще можно отслеживать доступность сервера
0
fgtmenow
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 257
05.05.2015, 09:36 5
помоему ему надо всего лишь проверить, есть ли доступ к интернету на уровне системы.

XML
1
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Java
1
2
3
4
5
6
public boolean isOnline() {
    ConnectivityManager cm =
        (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    return netInfo != null && netInfo.isConnectedOrConnecting();
}
src: http://stackoverflow.com/questions/1...never-timeouts
0
Pablito
2731 / 2166 / 735
Регистрация: 12.05.2014
Сообщений: 7,575
Завершенные тесты: 1
05.05.2015, 09:38 6
Цитата Сообщение от fgtmenow Посмотреть сообщение
помоему ему надо всего лишь проверить, есть ли доступ к интернету на уровне системы.
но это не решит всех проблем, только часть
у меня, например, на планшете часто показывает значек что я подключен по wi-fi, а инета нет...его нет у провайдера...там, дальше
0
fgtmenow
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 257
05.05.2015, 09:40 7
ping 8.8.8.8 + isOnline связка
0
Pablito
2731 / 2166 / 735
Регистрация: 12.05.2014
Сообщений: 7,575
Завершенные тесты: 1
05.05.2015, 09:47 8
гугло-днс может быть доступен, а сервер, к которому идет подключение - нет
0
fgtmenow
75 / 75 / 7
Регистрация: 29.03.2012
Сообщений: 257
05.05.2015, 09:50 9
по-моему эти три условия достаточны для опредения ситуации разрыва подключения с сервером со стороны приложения
0
eagl69
5 / 10 / 7
Регистрация: 12.10.2011
Сообщений: 506
05.05.2015, 11:38  [ТС] 10
Вопрос даже не в том чтобы контролировать соединение с конкретным сервером а в том чтобы определить сам выход в нет и его отсутствие при уже установленном соединении.
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
05.05.2015, 11:48 11
eagl69, может вам нужен heartbeat? Отдельный тред на сервере и на клиенте, ехо сокет, раз в 30 секунд допустим.
Цитата Сообщение от eagl69 Посмотреть сообщение
а вот приложение все еще думает что сокет активен
как так-то? Если сервер рвёт соединение (или же пропал интернет) сокет закрывается на клиенте ведь.
0
eagl69
5 / 10 / 7
Регистрация: 12.10.2011
Сообщений: 506
05.05.2015, 12:20  [ТС] 12
Цитата Сообщение от YuraAAA Посмотреть сообщение
как так-то? Если сервер рвёт соединение (или же пропал интернет) сокет закрывается на клиенте ведь.
Зашли в подвал (вам позвонили) интернет пропал, но приложение этого не видит и после появления нета слушает сокет ранее открытый... а сервер соответственно определив что соединение пропало закрыл его.
0
Pablito
2731 / 2166 / 735
Регистрация: 12.05.2014
Сообщений: 7,575
Завершенные тесты: 1
05.05.2015, 12:53 13
чем не устраивает вариант с таймаутом socket.setSoTimeout(время_в_миллисек) ?
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
05.05.2015, 13:04 14
И для HttpURLConnection и Jsoup.connect подскажите как таймаут использовать, а то не получается у меня.
0
Pablito
05.05.2015, 13:12
  #15

Не по теме:

не уверен что вопрос был ко мне, но я пользовался только таймаутом на Socket-е
а выше уровнем не приходилось

0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
05.05.2015, 13:15 16
Вообще для знатоков вопрос, у меня все работает и определяет наличие интернета, но вот когда есть соединение с wifi, а с внешкой соединения нет, тут тоже кажется таймаут нужен.
0
Pablito
2731 / 2166 / 735
Регистрация: 12.05.2014
Сообщений: 7,575
Завершенные тесты: 1
05.05.2015, 13:20 17
елки-палки, я об этом и говорю с начала темы, но меня никто не понимает

можно не проверять есть ли инет и даже wi-fi линк, при попытке открыть соединение вывалится эксепшн
либо сразу - что-то типа IO бла бла, либо по таймауту

вот их о обрабатывать, а смысла проверять включен ли вайфай нету никакого

я не настаиваю что этот метод правильный, андроид я знаю очень поверхностно, но как работает стек TCP/IP и все уровни OSI модели я знаю получше
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
05.05.2015, 13:32 18
Цитата Сообщение от Паблито Посмотреть сообщение
можно не проверять есть ли инет и даже wi-fi линк
Я об чем и спрашиваю, т.к. хочу выкинуть проверку "есть ли инет" и использовать таймаут.
Как для HttpURLConnection и Jsoup.connect это сделать? Есть пример?
0
Pablito
2731 / 2166 / 735
Регистрация: 12.05.2014
Сообщений: 7,575
Завершенные тесты: 1
05.05.2015, 13:50 19
ну у Jsoup.connect точно есть метод timeout() и он работает
проверить легко - поставить там например 10мс и подключение к любому сайту просто не будет успевать отрабатывать
Exception in thread "main" java.net.SocketTimeoutException: connect timed out
HttpURLConnection я не пользовался пока что
а он нужен при наличии Jsoup библиотеки? (я теперь фанат этой штуки)
1
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,074
05.05.2015, 14:36 20
Цитата Сообщение от Паблито Посмотреть сообщение
а он нужен при наличии Jsoup библиотеки?
Нет, по крайней мере у меня в импорте класса его нет.
0
05.05.2015, 14:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2015, 14:36

Глючит соединение с интернетом. Не открываются сайты, не удается установить DNS соединение
Добрый день! Помогите разобраться с проблемой!!! Есть сеть из 30 ПК, последнее...

Соединение с интернетом
Нужно проверить соединение с интернетом и далее взаимозависимости с...

Соединение с интернетом
Некоторые приложения (касперский, центр обновлений Windows, battle.net и пр.)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru