支持ipv6的iOS可达性类

时间:2016-01-25 09:21:03

标签: ipv6 reachability

我在我的应用程序中使用可访问性类来监视网络状态。以下是从Apple可访问性示例检查Internet可访问性的代码。它适用于IPv4网络。但它在IPv6 wifi网络上失败了。

+ (instancetype)reachabilityForInternetConnection
{
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;
return [self reachabilityWithAddress:&zeroAddress];
}

所以现在我们正在从我们的应用程序中支持IPv6网络。当我们升级这些代码以支持IPv6时,如下所示。

        struct sockaddr_in6 zeroAddress;
        bzero(&zeroAddress, sizeof(zeroAddress));
        zeroAddress.sin6_len = sizeof(zeroAddress);
        zeroAddress.sin6_family = AF_INET6;
        return [self reachabilityWithAddress: &zeroAddress];

上述IPv6支持代码在iOS9&以后用于IPv4和IPv6 WiFi网络的设备。但是在iOS8设备上它的IPV4网络失败了。那么Apple的可达性代码是否有任何更新可用于支持IPV6网络。 任何帮助,将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我认为如果您使用以下代码替换它,那么它将适合您。

+(Reachability*)reachabilityWithHostName:(NSString*)hostname
{
   return [Reachability reachabilityWithHostname:hostname];
}

还有一个

+(Reachability*)reachabilityWithHostname:(NSString*)hostname
{
SCNetworkReachabilityRef ref = SCNetworkReachabilityCreateWithName(NULL, [hostname UTF8String]);
if (ref) 
{
    id reachability = [[self alloc] initWithReachabilityRef:ref];

    return reachability;
}

return nil;
}

使用。初始化可达性类 您可以使用“google.com”作为域名来检查互联网连接。

  Reachability *r = [Reachability reachabilityForInternetConnection:@"your domain here"];

我希望这会对你有所帮助。