достижимость возвращает хост достижимым, даже если имя хоста не существует - PullRequest
1 голос
/ 20 февраля 2012

Много вопросов о достижимости, но, похоже, ни у кого нет проблемы, которую я решаю ... Как показывают многие примеры, я использую достижимость следующим образом:

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil];

hostReach = [[Reachability reachabilityWithHostName: @"www.google.com"] retain];
[hostReach startNotifier];
[self updateInterfaceWithReachability: hostReach];

И это прекрасно работает. Однако, если я изменю имя хоста на несуществующее, например, www.nonexistanthostforsure.com, доступность хоста все равно будет достигнута. Теперь, читая яблочный документ, у меня сложилось впечатление, что достижимость не может сказать мне, если хост (сервер) находится в сети. В этом случае результат будет иметь смысл, но тогда возникает вопрос: зачем вообще беспокоиться об имени хоста?

Ответы [ 3 ]

0 голосов
/ 17 апреля 2013

Вы пытались открыть обычный сокет TCP / IP для порта 21 на этом сервере?Если это удастся, вы будете знать, что хост находится в сети ....

0 голосов
/ 13 августа 2013

Достижимость только проверяет, может ли ваш URL-адрес хоста выйти с вашего устройства на маршрутизатор, но не подтверждает, достигает ли ваш запрос фактический сервер.

. Я думаю, что лучший способ проверить доступность адреса хоста.это путем проверки результатов запроса NSURL.

NSString *url= @"http://google.com";
NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:reqURL]];
NSURLResponse *resp = nil;
NSError *error = nil;
NSData *response = [NSURLConnection sendSynchronousRequest: theRequest returningResponse: &resp error: &error];
NSString *responseString = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];

Используя этот бит кода, если ваше устройство не может получить доступ к предоставленному URL-адресу, оно предоставляет некоторые выходные данные для переменной ошибки, если оно может получить доступ к запросу URL-адреса, ошибка равна Nil.

Достижимость дает положительный результат, даже если ваши URL-пакеты могут отправляться с вашего устройства и никогда не достигать хост-сервера.

0 голосов
/ 20 февраля 2012

" Зачем вообще беспокоиться об имени хоста? "

Я согласен.

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil];

hostReach = [[Reachability reachabilityForInternetConnection] retain];
[hostReach startNotifier];
[self updateInterfaceWithReachability: hostReach];

Документы Apple Reachability :

reachabilityForInternetConnection - проверяет, доступен ли маршрут по умолчанию. Должны использоваться приложениями, которые не подключаются к определенному хосту

Если вы проверите, доступен ли маршрут по умолчанию, а затем опрашиваете сервер и время ожидания соединения, вы все равно можете предпринять такие действия, как отображение сообщения «Невозможно подключиться к серверу», без необходимости проверки доступности для определенного имени хоста. По сути, он выполняет то же самое, за исключением того, что он более естественный, поскольку код обработки ошибок находится в середине вашего кода опроса, поэтому вам не нужно вызывать глобальный обработчик Reachability для него.

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