SCNetworkReachability仅适用于域名?

时间:2011-08-17 01:50:38

标签: iphone ios networking connect

鉴于iOS的SCNetworkReachability API配置如下:

SCNetworkReachabilityRef reachabilityRef = SCNetworkReachabilityCreateWithName(NULL, "example.com");
SCNetworkReachabilityContext context = {0, self, NULL, NULL, NULL};
SCNetworkReachabilitySetCallback(reachabilityRef, ReachabilityCallback, &context);
SCNetworkReachabilitySetDispatchQueue(reachabilityRef, dispatch_queue);

如果我使用域名配置它,如上例所示,它的效果很好。但是,如果我使用IP地址配置它,则永远不会调用回调。

任何人都可以确认这是SCNetworkReachability API的预期行为吗?如果是这样,任何线索为什么?

2 个答案:

答案 0 :(得分:1)

尝试使用SCNetworkReachabilityCreateWithAddress而不是SCNetworkReachabilityCreateWithName。

答案 1 :(得分:1)

使用适用于IP地址的eppz!reachability。简单的用法如:

// Get status on-demand.
[EPPZReachability reachHost:@"eppz.eu"
               completition:^(EPPZReachability *reachability)
{
    if (reachability.reachable) [self postSomething];
}];

确实如此。它不起作用,也不起作用SCNetworkReachabilityCreateWithAddress(它实际上适用于未来的可达性条件变化,但第一个回调永远不会被调用)。

如果您的设计仅需要按需可访问性检查,请考虑使用SCNetworkReachabilityGetFlags

更多信息:Why asynchronous reachability with IP address doesn’t work?Reachability with blocks for everyday use