我在我的应用程序中使用可达性类来监控网络state.The以下是从苹果可达性样本中检查互联网可达性的代码。它可以很好地与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];对于IPv4和IPv6wifi网络,上述IPv6支持代码在iOS9和更高版本的设备中都能很好地工作。但在iOS8设备上,它无法支持IPV4网络。那么,苹果的可达性代码是否也支持IPV6网络的更新。 如有任何帮助,我们将不胜感激。提前谢谢。
发布于 2016-06-21 15:59:30
我认为如果你替换为下面的代码,那么它将为你工作。
+(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作为域名来检查internet连接。
Reachability *r = [Reachability reachabilityForInternetConnection:@"your domain here"];我希望这能对你有所帮助。
https://stackoverflow.com/questions/34988920
复制相似问题