0

这是这个问题的副本。即使无线可用,SCNetworkReachabilityGetFlags 也会返回 0

我尝试了该帖子中提出的所有解决方案。但他们都没有为我工作。

    SCNetworkReachabilityRef  reachabilityRef = SCNetworkReachabilityCreateWithName(NULL, [hostname UTF8String]);
    BOOL success = SCNetworkReachabilityGetFlags(reachabilityRef, &flags); //flags are always 0.
    bool isAvailable = success && (flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired);

    CFRelease(reachabilityRef);

    if(isAvailable)
    {
        NSLog(@"Host is reachable: %d", flags);
    }
    else
    {
        NSLog(@"Host is unreachable");
    }

我正在尝试通过 VPN 连接到主机。有人可以建议一种解决方法吗?

4

1 回答 1

2

我在运输应用程序中成功使用了这个 API。首先,主机名必须类似于 www.apple.com。可达性需要一些时间来确定主机是否存在。

我在我的应用程序中采用的策略是在启动时假设它就在那里,并监视在许多(如 20)秒后启动的可达性通知。如果你不能等那么久,这里还有其他关于此的帖子,其中包含处理该问题的策略,例如,尝试立即 ping 主机。

请注意,移动设备在发布时确定此状态存在许多障碍,并且没有完美的解决方案。

我所做的是假设它已启动,放置一个显示“正在连接...”的微调器,如果我后来遇到可达性失败,则将其取下(或在请求失败时将其取下)。从那时起,它似乎会定期更新(我曾经通过隧道将我的应用程序带到火车上,我可以看到它随着网络访问的变化而显示“断开连接”和“连接”状态。

于 2013-04-25T21:02:46.920 回答