【问题标题】:iOS reachability class for ipv6 support用于 ipv6 支持的 iOS 可达性类
【发布时间】:2016-05-01 13:05:00
【问题描述】:

我在我的应用程序中使用可达性类来监控网络状态。以下是从 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];
}

所以现在我们正在从我们的应用程序中支持 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 网络失败。那么苹果的可达性代码上是否有任何更新也可以支持 IPV6 网络。 任何帮助,将不胜感激。提前致谢。

【问题讨论】:

  • 我在我的应用程序中使用可达性类来监控网络状态。每当 wifi 状态发生变化时(切换网络、关闭 wifi 等)。对于所有这些情况,networkReachabilityChanged 回调将通知我的应用程序。一旦此通知到达,我们的应用程序将尝试登录该热点,或者如果连接已经可用,它将更新主 UI。对于同样的我正在寻找 IPv6 网络支持。

标签: ipv6 reachability


【解决方案1】:

我认为如果你用下面的代码替换它会为你工作。

+(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"];

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 2015-11-03
    • 1970-01-01
    • 2017-01-13
    相关资源
    最近更新 更多