SCNetworkReachability 只适用于域名?

问题描述 投票:0回答:2

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

ios iphone networking
2个回答
1
投票

尝试使用 SCNetworkReachabilityCreateWithAddress 而不是 SCNetworkReachabilityCreateWithName。


1
投票

使用也适用于 IP 地址的

eppz!reachability
。简单用法如:

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

确实如此。它不会工作,也不会与

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

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

SCNetworkReachabilityGetFlags

更多内容:为什么 IP 地址的异步可达性不起作用?日常使用的块可达性

© www.soinside.com 2019 - 2024. All rights reserved.