Достижимость-хост отключается во время повторного подключения к интернету
Я использовал Этот вопрос, чтобы проверить, является ли подключение к интернету (Wi-Fi 3G) активным.
Это работает довольно хорошо, но есть небольшая проблема.Когда я выключаю интернет, приложение выдает предупреждение о том, что Интернет отключен; но когда я снова включаю его, пока соединение не будет определенно включено, оно говорит, что хост отключен, а на самом деле включен, и через некоторое время он регистрирует это.
Я хотел бы знать, что я могу сделать, чтобы передать это сообщение. появляются только тогда, когда сервер фактически выключен, а не при повторном подключении к интернету!
Вот мой код
-(void) checkNetworkStatus:(NSNotification *)notice
{
NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];
NetworkStatus hostStatus = [hostReachable currentReachabilityStatus];
if (internetStatus == NotReachable){
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Reloading Failed" message: @Seems like you're offline! n Some features, such as updating contents and downloading screenshots won't be available while you're offline.nNavigate to Settings > Wi-Fi to connect to the Internet and enjoy those features!") delegate:nil cancelButtonTitle:nil otherButtonTitles:@"Ok", nil];
[alert show];
[alert release];
NSLog(@"offline");
}
else if (internetStatus == ReachableViaWiFi || internetStatus == ReachableViaWWAN){
NSLog(@"online");
if (hostStatus == NotReachable)
{ NSLog(@"Server offline");
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Reloading Failed" message:@"Seems like there's a communication problem with the remote network. n Please try again in a while!" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"Ok", nil];
[alert show];
[alert release];
}
else if (hostStatus == ReachableViaWWAN || hostStatus == ReachableViaWiFi){
NSLog(@"server online");
//download data from remote server
}
}
}
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil];
internetReachable = [[Reachability reachabilityForInternetConnection] retain];
[internetReachable startNotifier];
hostReachable = [[Reachability reachabilityWithHostName: @"www.mywebsite.com"] retain];
[hostReachable startNotifier];
Есть идеи?
1 ответ:
Reachability
служит только для того, чтобы проверить, доступна ли сеть , и не сообщит вам, если ваш сервер не работает. Вам нужно будет использовать комбинациюReachability
иNSURLConnection
или другую стороннюю библиотеку для проверки состояния HTTP 200 и других допустимых статусов. Вы будете использоватьReachability
для отображения сообщения о том, что устройство не подключено, и после подключения вы будете использовать веб-запрос, чтобы уведомить пользователя, подключен ли сервер или нет. Там не так много вы можете сделайте о задержке подключения после включения интернета для вашего устройства, потому что требуется время, чтобы включить радио и подключиться к сотовой сети netowrks или Wi-Fi.