2

この質問を使用して、インターネット接続 (WiFi \ 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];

何か案は?

4

1 に答える 1

3

Reachabilityネットワークが到達可能かどうかを確認する目的でのみ機能し、サーバーがダウンしているかどうかは通知されません。HTTPステータス200およびその他の有効なステータスを確認するにはReachability、とまたはその他のサードパーティライブラリを組み合わせて使用​​する必要があります。NSURLConnectionを使用Reachabilityして、デバイスに接続がないことを示すメッセージを表示します。接続が確立されると、Web要求を使用して、サーバーがオンラインかどうかをユーザーに通知します。無線をオンにしてセルネットワークまたはwifiに接続するには時間がかかるため、デバイスのインターネットをオンに戻した後の接続遅延についてできることはあまりありません。

于 2012-08-30T19:30:22.340 に答える