>我在应用程序中使用可达性类来监视网络状态。以下是用于从 Apple 可访问性示例中检查互联网可访问性的代码。它适用于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];
}
u2028因此,现在我们正在从我们的应用程序中支持IPv6网络。当我们升级这些代码以支持 IPv6 时,如下所示。u2028
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网络。u2028任何帮助将不胜感激。提前谢谢。
如果您替换为以下代码,那么它将为您工作。
+(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"];
我希望这对你有所帮助。