Достижимость-хост отключается во время повторного подключения к интернету


Я использовал Этот вопрос, чтобы проверить, является ли подключение к интернету (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 2

1 ответ:

Reachability служит только для того, чтобы проверить, доступна ли сеть , и не сообщит вам, если ваш сервер не работает. Вам нужно будет использовать комбинацию Reachability и NSURLConnection или другую стороннюю библиотеку для проверки состояния HTTP 200 и других допустимых статусов. Вы будете использовать Reachability для отображения сообщения о том, что устройство не подключено, и после подключения вы будете использовать веб-запрос, чтобы уведомить пользователя, подключен ли сервер или нет. Там не так много вы можете сделайте о задержке подключения после включения интернета для вашего устройства, потому что требуется время, чтобы включить радио и подключиться к сотовой сети netowrks или Wi-Fi.