iOS开发-关于网络状态的判断

Posted Jierism

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS开发-关于网络状态的判断相关的知识,希望对你有一定的参考价值。

  在判断网络状态这个问题上,苹果提供了一个叫Reachability的第三方库,但是这个库并不能真正的检测我们的网络状态,我也是在调试程序的时候发现的。详情可以阅读这个博客http://blog.csdn.net/openglnewbee/article/details/50705146

  但是我并没有使用上面博客的方法,而是使用另外一种方法。

  因为[Reachability reachabilityWithHostName:]完全没用,所以我把以下代码作为Reachablity类的成员函数添加到Reachability.m文件,并且在.h文件加上声明方便调用,代码如下:

+ (BOOL)connectedToNetWork {
    struct sockaddr_in zeroAddress;
    bzero(&zeroAddress, sizeof(zeroAddress));
    zeroAddress.sin_len = sizeof(zeroAddress);
    zeroAddress.sin_family = AF_INET;
    SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
    SCNetworkReachabilityFlags flags;
    BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
    CFRelease(defaultRouteReachability);
    if (!didRetrieveFlags) {
        printf("Error. Count not recover network reachability flags/n");
        return NO;
    }
    BOOL isReachable = flags & kSCNetworkFlagsReachable;
    BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
    return (isReachable && !needsConnection) ? YES : NO;
}
上述代码也有局限,只能判断网络是否连通而无法确定具体的连通方式,不过对于我的需求来说已经够了。

以上是关于iOS开发-关于网络状态的判断的主要内容,如果未能解决你的问题,请参考以下文章

iOS完美的网络状态判断工具

iOS完美的网络状态判断工具

IOS 判读档当前网络状态

iOS 判断当前网络状态

利用CoreTelephony获取用户当前网络状态(判断2G,3G,4G)

Swift 权限判断