problema iPhone SDK reachabilityWithAddress
-
28-09-2019 - |
Domanda
Ho bisogno di verificare la connettività con un solo indirizzo IP. Sto cercando di farlo con classe di Apple di raggiungibilità, usando l'opzione reachabilityWithAddress. E il mio problema è che posso mettere qualsiasi indirizzo IP nel campo callAddress.sin_addr.s_addr e statusText sempre sarà "accessibili dall'esterno". Come posso fare per controllare esattamente la connettività all'indirizzo IP?
-(BOOL)reachabilityTest {
struct sockaddr_in callAddress;
callAddress.sin_len = sizeof(callAddress);
callAddress.sin_family = AF_INET;
callAddress.sin_port = htons(24);
callAddress.sin_addr.s_addr = inet_addr("212.83.3.190");
Reachability *hostReach = [[Reachability reachabilityWithAddress:&callAddress] retain];
NetworkStatus netStatus = [hostReach currentReachabilityStatus];
if (netStatus == NotReachable)
{
NSLog(@"NotReachable");
statusField.text = @"NOT reachable";
return NO;
}
if (netStatus == ReachableViaWiFi)
{
NSLog(@"ReachableViaWiFi");
statusField.text = @"reachable";
return YES;
}
[Reachability release];
}
Soluzione
Invece di usare le classi di raggiungibilità, andare vecchia scuola e aprire una connessione TCP ad esso. Se la risposta alla connect()
è EHOSTUNREACH
, allora non si può. Se la risposta è ECONNREFUSED
, o una connessione di successo, allora si può.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow