2011-08-17 36 views
0

鉴于iOS版的SCNetworkReachability API配置是这样的:SCNetworkReachability只适用于域名?

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

,如果我有一个域名配置它在上面的例子中它的工作原理很好。但是,如果我使用IP地址对其进行配置,则从不会调用回调。

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

回答

1

尝试使用SCNetworkReachabilityCreateWithAddress而不是SCNetworkReachabilityCreateWithName。

+0

你应该使用什么地址? (我想我已经看到了一些错误信息。) –

+0

您可以使用'struct sockaddr_in nullAddr; bzero(&nullAddr,sizeof(nullAddr)); nullAddr.sin_len = sizeof(nullAddr); nullAddr.sin_family = AF_INET; (空, (struct sockaddr *)&nullAddr);' –

1

使用eppz!reachability也可以很好地与IP地址配合使用。简单的用法,如:

// 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