How to use reachability class to detect valid internet connection?

前端 未结 7 652
遇见更好的自我
遇见更好的自我 2020-11-29 23:24

I\'m new to iOS development and am struggling to get the reachability.h class to work. Here is my code for view controller:

- (void)viewWillAppear:(BOOL)anim         


        
7条回答
  •  日久生厌
    2020-11-30 00:08

    Update: Nov 4 2013

    Using Reachability 3.0 version on iOS7

    To build on top of @NR4TR and @codecaffeine's answers:

    There are 5 ways to do this (not compiled :)

    #include 
    #include 
    
    //1 - Is www.apple.com reachable?
    Reachability *rHostName = [Reachability reachabilityWithHostName:@"www.apple.com"];
    NetworkStatus s1 = [rHostName currentReachabilityStatus];
    
    //2 - Is local wifi router or access point reachable?
    Reachability *rLocalWiFi = [Reachability reachabilityForLocalWiFi];
    NetworkStatus s2 = [rLocalWiFi currentReachabilityStatus];
    
    //3 - Is my access point connected to a router and the router connected to the internet?
    Reachability *rConnection = [Reachability reachabilityForInternetConnection];
    NetworkStatus s3 = [rConnection currentReachabilityStatus];
    
    //4  IPv4 standard addresses checking instead of host to avoid dns lookup step
    struct sockaddr_in saIPv4;
    inet_pton(AF_INET, "74.125.239.51", &(saIPv4.sin_addr));
    saIPv4.sin_len = sizeof(saIPv4);
    saIPv4.sin_family = AF_INET;
    Reachability *rIPv4 = [Reachability reachabilityWithAddress:&saIPv4];
    NetworkStatus s4 = [rIPv4 currentReachabilityStatus];
    
    //5  IPv6 addresses checking instead of host to avoid dns lookup step
    struct sockaddr_in saIPv6;
    inet_pton(AF_INET, "2607:f8b0:4010:801::1014", &(saIPv6.sin_addr));
    saIPv6.sin_len = sizeof(saIPv6);
    saIPv6.sin_family = AF_INET;
    Reachability *rIPv6 = [Reachability reachabilityWithAddress:&saIPv6];
    NetworkStatus s5 = [rIPv6 currentReachabilityStatus];
    

    Handling status is same

    if (ReachableViaWiFi == s1)
        return @"WiFi"; //@"WLAN"
    
    if (ReachableViaWWAN == s1)
        return @"Cellular"; //@"WWAN"
    
    return @"None";
    

提交回复
热议问题