169 похожих чатов

Вот ты написал пинг 8.8.8.8, получил ответ. это есть подключение

или нет?

14 ответов

18 просмотров

Ну смотря что мне нужно. Если мне нужен сервис яндекса, я буду пинговать именно его. Так как 8888, ни какого отношения к нему не имеет, в прочем, как и к основному гуглу.

Evgeny-Chesnokov Автор вопроса
Андрей
Ну смотря что мне нужно. Если мне нужен сервис янд...

нет, стоп, ты же сам уже отказался разговаривать о том, что тебе нужно, ты настаиваешь весь день на формулировке именно "просто проверить подключение к сети, а не к какому-то серверу", что с этой формулировкой случилось? проехали?

Evgeny Chesnokov
нет, стоп, ты же сам уже отказался разговаривать о...

Ну потому, что я вел вопрос в контексте, почему разработчики не дали нам возможность, гарантированно проверить, что пользователь, не запретил нашему приложению доступ в сеть. Фаерволом, отключением кабеля и тд. Мне нужен был сам факт. А если речь пошла о реальном проекте, то он конечно с чем то работает и нам логично проверять именно доступность этого ресурса.

Evgeny Chesnokov
доступ В КАКУЮ сеть?

Да понял я уже про это. Что нет понятия конкретной сети. Но они же тем не менее сообщают, что есть подключение без доступа к интернету. Вот и дали бы разрабам такую возможность.

Evgeny-Chesnokov Автор вопроса
Андрей
Да понял я уже про это. Что нет понятия конкретной...

так такая возможность есть, мы же обсуждали это сегодня, ты пропустил? NetworkCapabilities.NET_CAPABILITY_INTERNET

Да, видимо зачитался и из головы контекст частично выпал.

Evgeny-Chesnokov Автор вопроса
Андрей
Да, видимо зачитался и из головы контекст частично...

короче, смотри как это на практике делается. как ты уже понял, обычно тебя волнует доступ до твоего нужного ресурса, а не до всей сети в целом. поэтому конечно люди умеют гонять тестовые запросы до своего бэкэнда. но главное тут в том, что даже такая проверка не спасает тебя вообще ни от чего. вот твой сервер пинговался, а пока ты сформировал к нему уже собственно нужный тебе запрос - сервер уже умер/пользователь въехал в тоннель/на счету у пользователя кончились деньги и твое приложение осталось без доступа до твоего сервера. а ты в этот момент уже в сокет пишешь/читаешь. в этот момент происходит следующее: либо чтение/запись зависнет до таймаута, а потом кинет эксепшен, либо сразу вылетит эксепшен, типа, сорян, ошибка ввода-вывода. и вот этот эксепшен ты обязан в приложении обрабатывать в любом случае, не важно, сделал ты до этого проверку на наличие подключения или нет. по результатам обработки такого эксепшена ты обычно решаешь тут же попробовать снова сделать нужный запрос. но и он умирает точно так же. поэтому ты решаешь подождать (не спамить же непрерывно, не жечь же трафик и батарейку) и спустя, например, 5 секунд попробовать еще раз. А потом спустя 10. 20. 40. минуту. пять минут. Это называется "exponential backoff policy". Но что делать, если твоя экспонента уже накапала так, что запросы происходят раз в полчаса, а интернет вдруг появился? Вот для этого и существуют сервисы типа ConnectivityManager или NetworkCapabilities: они позволяют тебе подписаться (листенером) на событие "о, дали сеть" или там "сменился вайфай" или там "переключились с мобильной связи на вайфай". И тогда можно совершить, например, внеурочную попытку снова сделать нужный запрос, не дожидаясь таймаута, ведь у нас есть определенные основания полагать, что ситуация изменилась. Итого: - обязательная обработка ошибки ввода-вывода - экспоненциальная задержка повторных попыток, ограниченная сверху - подписка на события сетевых сервисов И вот это вещи, которые тебе придется делать в любом случае, не важно, сделал ты перед этим проверку доступности сети, или нет. А главное, что вот в этом раскладе тебе "проверка доступности сети" вообще не потребуется - её роль выполняет твой первоначальный запрос. Понятно?

Evgeny Chesnokov
короче, смотри как это на практике делается. как ...

+ отличная информация. Большое спасибо за науку. Сеть очень интересна мне и эта неделя посвящена именно ей.

Evgeny Chesnokov
короче, смотри как это на практике делается. как ...

Как говорится разжевал, переварил, и высрал)))

MeLlasT
+

Evgeny Chesnokov рейтинг 20 (+1) [+20 -0].

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта