Как определить реальную доступность сети? - PullRequest
7 голосов
/ 12 октября 2010

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

когда я отключаю WIFI в телефоне, он работает нормально, я попробовал Проверка подключения к Интернету в Objective C пример кода "isDataSourceAvailable", даже если он не работаетМожет ли кто-нибудь помочь мне решить эту проблему, действительно ценю.

Ответы [ 3 ]

10 голосов
/ 12 октября 2010

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

+ (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, чтобы не загружать весь ресурс.

1 голос
/ 12 октября 2010

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

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

См. тот же вопрос о сбое сервера (с точки зрения программирования, конечно.)

В основном посмотритевверх 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 голосов
/ 28 июня 2011

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

Это часть проекта ASI HTTPRequest на git. Он расширяет пример Apple и, по-видимому, достаточно хорош для множества приложений в магазине (см. Стену ASI о том, кто использует: http://allseeing -i.com / ASIHTTPRequest / Кто-использует-это )

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...