2012-08-30 2 views
2

this 질문을 사용하여 인터넷 연결 (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]; 

어떤 아이디어가있어?

+0

Reachability의 어떤 버전을 사용하고 있습니까? – Joe

+0

도달 범위 버전 2.2 – Phillip

+1

특정 호스트가 실제로 작동하는지 확인하고 연결하려면 NSURLConnection 등의 연결을 열어야합니다. 도달 가능성은 장치에 네트워크 연결이 무엇인지 알려줍니다. – onnoweb

답변

3

Reachabilitynetwork is reachable인지 확인하기위한 용도로만 사용되며 서버가 다운되었는지 여부는 알려주지 않습니다. ReachabilityNSURLConnection 또는 기타 타사 라이브러리를 조합하여 HTTP 상태 200 및 기타 유효한 상태를 확인해야합니다. 장치가 연결되어 있지 않다는 메시지를 표시하려면 Reachability을 사용하고 연결되면 서버가 온라인 상태인지 여부를 사용자에게 알리기 위해 웹 요청을 사용합니다. 무선을 켜고 셀 네트워크 또는 Wi-Fi에 연결하는 데 시간이 걸리기 때문에 장치의 인터넷을 다시 켠 후에 연결 지연에 대해 할 수있는 일은 많지 않습니다.

+0

아, 감사합니다. – Phillip