2010-10-12 28 views
7

, gdy iPhone łączy się z routerem bezprzewodowym, a router nie jest podłączony do Internetu? muszę wyświetlić komunikat o błędzie "sprawdź połączenie internetowe" próbowałem kodu próbki zasięgu. ale bez powodzenia, http://developer.apple.com/library/ios/#samplecode/Reachability/Listings/ReadMe_txt.htmlJak wykryć rzeczywistą dostępność sieci?

kiedy wyłączyć WiFi w telefonie to działa dobrze, próbowałem kod Checking For Internet Connectivity in Objective C próbka „isDataSourceAvailable” nawet itz nie działa, może ktoś mi pomóc rozwiązać ten problem, naprawdę appriciate.

+0

Nie ma łatwego sposobu sprawdzenia, czy router, serwer lub * dowolna stacja między nimi nie działa. – Eiko

Odpowiedz

10

Można zrobić coś takiego:

+ (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); 
} 

To jest synchroniczna żądania, tak, że będzie blokować bieżącego wątku. Możesz wykonać całą kontrolę sieci w wątku w tle, aby zablokowanie go nie miało znaczenia, lub możesz wysłać żądanie asynchronicznie. Możesz również ustawić metodę HTTP na HEAD, aby nie pobierać całego zasobu.

+0

Thx za odpowiedź, pomóż mi to naprawić, zrobiłem kilka modyfikacji metody, którą podałeś. – Sam

1

Polecam zrobić to samo, co Microsoft, i być naprawdę niegodziwym, można nawet korzystać z ich serwerów, ponieważ prawdopodobnie upewnią się, że są one dostępne w najbliższej przyszłości.

Sprawdzają nazwę hosta, a następnie uzyskują dostęp do bardzo małego pliku na serwerze internetowym.

Zobacz same question on serverfault (z braku perspektywy programowania oczywiście.)

Zasadniczo sprawdzić adres IP dla nazwy hosta (w tym przykładzie „dns.msftncsi.com”), a następnie uzyskać dostęp do adresu URL, na przykład http://msftncsi.com/ncsi.txt. Można to zrobić za pomocą prostego programowania gniazd, jeśli chcesz, prawdziwy HTTP nie jest konieczny.

Otwórz gniazdo na porcie 80, na znalezionym IP, sprawdzając nazwę hosta. Wyślij łańcuch do gniazda tak:

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

Następnie czekać na coś do powrotu. Jeśli coś wróci, nawet jeden bajt, oznacza to, że masz dostęp do Internetu.

Lub przynajmniej dostęp do tego serwera, który w tym przykładzie jest Microsoft.

Powiązane problemy