ios开发 检测是否连接网络代码

1,先导入SystemConfiguration.framework

2, #import<SystemConfiguration/SystemConfiguration.h>
   #import<netdb.h>

3, 源代码如下:
- (BOOL) connectedToNetWork
{
    //创建零地址,0.0.0.0的地址表示查询本机的网络连接状态
    struct sockaddr_in zeroAddress;
    bzero(&zeroAddress, sizeof(zeroAddress));
    zeroAddress.sin_len = sizeof(zeroAddress);
    zeroAddress.sin_family = AF_INET;
    
    /**
     * SCNetworkReachabilityRef: 用来保存创建测试连接返回的引用
     * 
     * SCNetworkReachabilityCreateWithAddress: 根据传入的地址测试连接.
     * 第一个参数可以为NULL或kCFAllocatorDefault
     * 第二个参数为需要测试连接的IP地址,当为0.0.0.0时则可以查询本机的网络连接状态
     * 同时返回一个引用必须在用完后释放
     * PS: SCNetworkReachabilityCreateWithName: 这是个根据传入的网络测试连接,
     * 第二个参数比如为“www.apple.com”,其他和上一个一样
     *
     * SCNetworkReachabilityGetFlags:这个函数用来获得测试连接的状态,
     * 第一个参数为之前建立的测试连接的引用,
     * 第二个参数用来保存获得的状态,
     * 如果能获得状态则返回TRUE,否则返回FALSE。
     * 
     */
    
    SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
    SCNetworkReachabilityFlags flags;
    
    BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
    CFRelease(defaultRouteReachability);
    
    if (!didRetrieveFlags) {
        printf("Error. Could not recover network reachability flags");
        return NO;
    }
    
    /**
     *  kSCNetworkReachabilityFlagsReachable: 能够连接网络
     *  kSCNetworkReachabilityFlagsConnectionRequired: 能够连接网络,但是首先得建立连接过程
     *  kSCNetworkReachabilityFlagsIsWWAN: 判断是否通过蜂窝网覆盖的连接,
     *  比如EDGE,GPRS或者目前的3G.主要是区别通过WiFi的连接
     */
    BOOL isReachable = ((flags & kSCNetworkReachabilityFlagsReachable) != 0);
    BOOL needsConnection = ((flags & kSCNetworkReachabilityFlagsConnectionRequired) != 0);
    
    return (isReachable && !needsConnection) ? YES : NO;
}


当然,可以使用每秒检测一次
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(testWeb) userInfo:nil repeats:YES];

-(void)testWeb{
    NSString *result;
    if ([self connectedToNetWork]) {
        result = @"Connection Successed!!!";
    }else {
        result = @"Connection Faild!!!";
    }
    NSLog(@"result:%@",result);

}

猜你喜欢

转载自lizi07.iteye.com/blog/1630917