AFNetworking:使用IP地址,应用程序无法访问服务器

时间:2013-11-12 00:17:19

标签: ios objective-c afnetworking reachability afhttpclient

当我尝试使用ip地址而不是主机名来告诉模拟器中的ios应用程序与本地服务器通信时,应用程序挂起在加载屏幕上,等待来自服务器的响应从未到来。

我是Objective C的新手,但是代码使用AFNetowrking框架来处理请求,并且对AFHTTPClient对象上的ip地址设置了不同的SCNetworkReachabilityFlags属性。

在调试期间捕获了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}

在AFHTTPClient.m类的startMonitoringNetworkReachability方法中,有以下if语句为ip地址触发但我不知道是否是问题:

/* 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来连接服务器?

1 个答案:

答案 0 :(得分:4)

这是一个常见问题。在AFNetworking github页面上对此进行了讨论:https://github.com/AFNetworking/AFNetworking/issues/2191

以不同方式检查域名和IP地址。

您可以使用managerForAddress:创建的经理检查IP地址 http://cocoadocs.org/docsets/AFNetworking/2.5.0/Classes/AFNetworkReachabilityManager.html#//api/name/managerForAddress

我希望这有帮助!如果您还有其他问题,请与我们联系。

修改

我想我误解了这个问题。

我之前使用AFHTTPRequestOperationManagerAFURLSessionManager发送了请求,他们都使用网址中的IP地址。

可以在此处找到如何使用它们的示例:http://cocoadocs.org/docsets/AFNetworking/2.5.0/#usage