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];
 }
È stato utile?

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
scroll top