Как определить подключение к Интернету, когда я закрываю модем, оставляя маршрутизатор открытым?

Я использую Reachability из библиотеки разработчика приложений, чтобы проверить подключение к Интернету, код следующий:

+(BOOL)reachable {
Reachability *r = [Reachability reachabilityForInternetConnection];
NetworkStatus internetStatus = [r currentReachabilityStatus];

Reachability *r1 = [Reachability reachabilityForLocalWiFi];
NetworkStatus internetStatus1 = [r1 currentReachabilityStatus];

Reachability *r2 = [Reachability reachabilityWithHostName:FTPURL];
NetworkStatus internetStatus2 = [r2 currentReachabilityStatus];

DLog(@"%d,%d,%d",internetStatus,internetStatus1,internetStatus2);

if(internetStatus != NotReachable && internetStatus1 != NotReachable && internetStatus2 != NotReachable) 
{
    return YES;
}

return NO;

}

Если Wi-Fi доступен, три статуса обязательно должны быть «Доступен». Если я отключу Wi-Fi вручную (флаг сетевого подключения выключен), все три статуса будут «НЕ достижимы».

Когда я выключаю модем, при этом оставляю беспроводной маршрутизатор открытым (флаг сетевого подключения горит). Хотя я не могу получить доступ к Интернету, все три статуса по-прежнему «Доступны». Я хочу знать, почему это произошло и как определить этот статус «Недостижимость»?


person itenyh    schedule 05.07.2012    source источник
comment
У меня такая же проблема, вы узнали почему ?!   -  person M.Othman    schedule 25.08.2012


Ответы (1)


Что касается вашего iPhone, нет различия между очень маленькой сетью (то есть вашей беспроводной локальной сетью) и Интернетом. Все, что он может сказать наверняка, - это то, что он подключен к сети TCP / IP. Невозможно сказать, насколько велика эта сеть.

Если вы хотите точно узнать, доступен ли ваш сервер с какого-либо конкретного iPhone, вы должны попытаться подключиться к нему. Даже в этом случае он может исчезнуть между проверкой соединения и отправкой реальных данных. Таким образом, независимо от того, проверяете ли вы соединение перед запуском, вам все равно придется аккуратно обрабатывать потерю соединения во время передачи данных. С таким же успехом вы можете не утруждать себя проверкой заранее и просто предполагать, что он есть и у вас есть хороший код для обработки ошибок передачи.

person JeremyP    schedule 05.07.2012