2013-11-12 5 views
6

Когда я пытаюсь использовать ip-адрес вместо имени хоста, чтобы сообщить приложение iOS в симуляторе поговорить с локальным сервером, приложение зависает на экране загрузки, ожидая ответ от сервера, который никогда не приходит.AFNetworking: использование IP-адреса приложение не может достичь сервера

Я новичок в Objective C, но код использует фреймворк AFNetowrking, который обрабатывает запрос, а свойство SCNetworkReachabilityFlags устанавливается по-разному для IP-адреса объекта AFHTTPClient.

Следующие свойства объекта AFHTTPClient для ip-адреса и имени хоста были захвачены во время отладки.

<SCNetworkReachability 0xd26d8a0 [0x53b9ec8]> 
{address = 127.0.0.1, flags = 0x00010002, if_index = 1} 

<SCNetworkReachability 0xcf283f0 [0x53b9ec8]> 
{name = localhost (server query active), flags = 0x80000000, if_index = 0} 

В методе startMonitoringNetworkReachability в классе AFHTTPClient.m есть следующее, если утверждение, что срабатывает адрес внутрибрюшинно, но я не знаю, если это проблема:

/* Network reachability monitoring does not establish a baseline for IP addresses as 
it does for hostnames, so if the base URL host is an IP address, the initial 
reachability callback is manually triggered. 
*/ 
if (AFURLHostIsIPAddress(self.baseURL)) { 
    SCNetworkReachabilityFlags flags; 
    SCNetworkReachabilityGetFlags(self.networkReachability, &flags); 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     AFNetworkReachabilityStatus status = AFNetworkReachabilityStatusForFlags(flags); 
     callback(status); 
    }); 
} 

Мои вопрос заключается в том, что вызывает проблему, и как я могу использовать IP-адрес как baseURL для подключения к серверу?

+0

Итак, ваш сервер не отвечает? Что за вопрос? –

+0

Привет, Скотт, верно, сервер торнадо не отвечает, когда используется ip-адрес. Я думаю, что AFHTTPClient никогда не обнаруживает, что сервер доступен, хотя при использовании имени хоста он есть. Я добавил вопрос к исходному сообщению. Благодарю. – wanyo

+0

Есть ли способ использовать ip-адрес в правой строке? – TonyTony

ответ

4

Это распространенная проблема. Об этом говорилось на странице AFNetworking github: https://github.com/AFNetworking/AFNetworking/issues/2191

Домены и IP-адреса проверены по-разному.

Вы можете проверить IP-адрес, используя менеджер, созданный с managerForAddress: http://cocoadocs.org/docsets/AFNetworking/2.5.0/Classes/AFNetworkReachabilityManager.html#//api/name/managerForAddress:

Я надеюсь, что это помогает! Позвольте мне знать, если у вас есть еще вопросы.

EDIT

Я думаю, что я неправильно понял вопрос.

Я отправил запросы, используя AFHTTPRequestOperationManager и AFURLSessionManager, и они оба работают с использованием IP-адресов в URL-адресе.

Пример того, как использовать их можно найти здесь: http://cocoadocs.org/docsets/AFNetworking/2.5.0/#usage

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

  • Нет связанных вопросов^_^