2010-10-12 7 views
7

lorsque l'iPhone se connecte à un routeur sans fil et que ce dernier n'est pas connecté à Internet? J'ai besoin d'afficher un message d'erreur disant "vérifiez votre connexion internet" j'ai essayé l'exemple de code d'accessibilité. mais pas de chance, http://developer.apple.com/library/ios/#samplecode/Reachability/Listings/ReadMe_txt.htmlComment détecter la disponibilité réelle du réseau?

quand je désactiver le WIFI dans le téléphone, il fonctionne très bien, j'ai essayé le code « isDataSourceAvailable » échantillon Checking For Internet Connectivity in Objective C même itz ne fonctionne pas, peut me aider à résoudre ce problème, vraiment appriciate.

+0

Pas de moyen facile de voir si c'est le routeur, le serveur ou * toute * station entre eux ne fonctionne pas. – Eiko

Répondre

10

Vous pourriez faire quelque chose comme ceci:

+ (BOOL) pingServer 
{ 
    NSURL *url = [NSURL URLWithString:@"http://some-url-that-has-to-work/"]; 
    NSURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 
    NSHTTPURLResponse *response = nil; 
    [NSURLConnection sendSynchronousRequest:request 
     returningResponse:&response error:NULL]; 
    return (response != nil); 
} 

Ceci est une demande synchrone, afin qu'il bloque le thread courant. Vous pouvez effectuer la vérification complète du réseau dans un thread d'arrière-plan, de sorte que le blocage ne soit pas important, ou vous pouvez envoyer la requête de manière asynchrone. Vous pouvez également définir la méthode HTTP sur HEAD, afin de ne pas télécharger la ressource entière.

+0

Thx pour la réponse cela m'aider à corriger cela a fait quelques modifications à la méthode que vous avez donnée. – Sam

1

Je vous recommande de faire la même chose que Microsoft, et pour être vraiment méchant, vous pouvez même utiliser leurs serveurs, car ils s'assureront probablement qu'ils sont en ligne dans un avenir prévisible.

Ils recherchent un nom d'hôte puis accèdent à un très petit fichier sur un serveur Web.

Voir la same question on serverfault (dans une perspective non de programmation bien sûr.)

Fondamentalement, rechercher l'adresse IP pour un nom d'hôte (dans cet exemple « dns.msftncsi.com »), puis accéder à l'URL, par exemple http://msftncsi.com/ncsi.txt. Cela peut être fait avec une simple programmation de socket si vous le souhaitez, un vrai HTTP n'est pas nécessaire.

Ouvrez une socket sur le port 80, sur l'adresse IP que vous avez trouvée en recherchant le nom d'hôte. Envoyer une chaîne à la prise comme ceci:

"GET /msftncsi.com/ncsi.txt HTTP/1.1\nHost: msftncsi.com:80\n\n" 

Ensuite, attendez quelque chose à revenir. Si quelque chose revient, même un seul octet, cela signifie que vous avez accès à Internet.

Ou au moins l'accès à ce serveur, qui dans cet exemple est Microsoft.

Questions connexes