Sowjanya lankisetty Sowjanya lankisetty - 5 months ago 93
iOS Question

reachabilityWithAddress is not working in Objective C programming

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 sockaddr_in address;
address.sin_len = sizeof(address);
address.sin_family = AF_INET;
address.sin_port = htons(80);
address.sin_addr.s_addr = inet_addr("74.125.71.104");`

Reachability *reach = [Reachability reachabilityWithAddress:&address];


but those not working.

When I change to
reachabilityWithHostname
, it's working.

Answer

Simply tried substituting domain name with ip and it worked. I dont relly see any need to create the init_addr and all

 self.internetReachability = [Reachability reachabilityWithHostName:@"74.125.71.104"];
[self.internetReachability startNotifier];
[self updateInterfaceWithReachability:self.internetReachability];

EDIT

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

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
self.internetReachability = [Reachability reachabilityWithHostName:@"74.125.71.104"];
[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.