鉴于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的预期行为吗?如果是这样,任何线索为什么?
答案 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