2010-10-12 2 views
7

Когда iPhone подключается к беспроводному маршрутизатору, и этот маршрутизатор не подключен к Интернету? Мне нужно отобразить сообщение об ошибке, в котором говорилось: «Проверьте подключение к Интернету», я попробовал код примера «Доступность». но не повезло, http://developer.apple.com/library/ios/#samplecode/Reachability/Listings/ReadMe_txt.htmlКак определить реальную доступность сети?

, когда я отключить WIFI в телефоне он работает нормально, я попробовал код Checking For Internet Connectivity in Objective C образец «isDataSourceAvailable» даже иц не работает, может ли один помочь мне решить эту проблему, на самом деле appriciate.

+0

Нет простого способа узнать, не работает ли маршрутизатор, сервер или * любая * станция между ними. – Eiko

ответ

10

Вы могли бы сделать что-то вроде этого:

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

Это синхронный запрос, так что он будет блокировать текущий поток. Вы можете выполнить проверку всей сети в фоновом потоке, чтобы блокировка не имела значения, или вы можете отправить запрос асинхронно. Также вы можете настроить HTTP-метод HEAD, чтобы вы не загружали весь ресурс.

+0

Thx для ответа, это поможет мне исправить это, сделал несколько модификаций метода, который вы дали. – Sam

1

Я рекомендую вам делать то же, что и Microsoft, и быть действительно злым, вы даже можете использовать свои серверы, так как они, вероятно, будут уверены, что они находятся в очереди в обозримом будущем.

Они ищут имя хоста, а затем получают доступ к очень маленькому файлу на веб-сервере.

Смотрите same question on serverfault (из не программирования точки зрения, конечно.)

основном посмотреть на IP-адрес для имени хоста (в этом примере «dns.msftncsi.com»), а затем получить доступ к URL, например http://msftncsi.com/ncsi.txt. Это можно сделать с помощью простого программирования сокетов, если вам нравится, настоящий HTTP не нужен.

Откройте сокет на порт 80, на IP-адрес, найденный вами, просмотрев имя хоста. Отправить строку в гнездо так:

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

Тогда чего-то ждать, чтобы вернуться. Если что-то возвращается, даже один байт, это означает, что у вас есть доступ в Интернет.

Или, по крайней мере, доступ к этому серверу, который в этом примере является Microsoft.

0

https://github.com/adib/asi-http-request/blob/master/External/Reachability/Reachability.h

Это часть АСИ HTTPRequest проекта мерзавца. Это расширяет пример Apple и, по-видимому, достаточно хорош для довольно многих приложений в магазине (см. Стену ASI, использующих: http://allseeing-i.com/ASIHTTPRequest/Who-is-using-it)

Anywho, я знаю, что ответ уже принят, но для дальнейшего использования.

Смежные вопросы