reachabilityWithAddress is not working in Objective C programming

前端 未结 1 497

I want to check a server is live or not with ip, for example, 74.125.71.104 (Google\'s ip)

// allocate a reachability object

`struct         


        
相关标签:
1条回答
  • 2021-01-20 22:02

    Please import #include <arpa/inet.h>

     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
    struct sockaddr_in address;
    address.sin_len = sizeof(address);
    address.sin_family = AF_INET;
    address.sin_port = htons(8080);
    address.sin_addr.s_addr = inet_addr("216.58.199.174"); //google ip
    self.internetReachability = [Reachability reachabilityWithAddress:&address];
    [self.internetReachability startNotifier];
    [self updateInterfaceWithReachability:self.internetReachability];
    

    EDIT

    As per your comments your reachability blocks are not called. I always use notifications not much aware of reachability blocks. So I prefer using notifications as follow.

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
    struct sockaddr_in address;
    address.sin_len = sizeof(address);
    address.sin_family = AF_INET;
    address.sin_port = htons(8080);
    address.sin_addr.s_addr = inet_addr("216.58.199.174");
    self.internetReachability = [Reachability reachabilityWithAddress:&address];
    [self.internetReachability startNotifier];
    [self updateInterfaceWithReachability:self.internetReachability];
    

    Now whenever your internet status changes reachabilityChanged method will be triggerred with reachability instance :)

    - (void) reachabilityChanged:(NSNotification *)note {
        Reachability* curReach = [note object];
        [self updateInterfaceWithReachability:curReach];
    }
    

    Finally implement updateInterfaceWithReachability as

    - (void)updateInterfaceWithReachability:(Reachability *)reachability {
       NetworkStatus netStatus = [reachability currentReachabilityStatus];
                switch (netStatus)
                {
                    case NotReachable: {
                        //not reachable
                    }
                    break;
                    case ReachableViaWWAN:
                    case ReachableViaWiFi:        {
                        //reachable via either 3g or wifi
                    }
                    break;
                }
    }
    

    Hope this helps.

    0 讨论(0)
提交回复
热议问题