[IOS秘技]检查网络是否连接

首先要引入:

 

  
  
  
  
  1. #import < SystemConfiguration/SystemConfiguration.h > 
  2. #include < netdb.h > 

下面是 判断是否连接到网络的方法.注释中有对相关代码与方法的解释.

 

 

  
  
  
  
  1. - (BOOL) connectedToNetwork 
  2.     // 创建零地址,0.0.0.0的地址表示查询本机的网络连接状态 
  3.     struct sockaddr_in zeroAddress; 
  4.     bzero(&zeroAddress, sizeof(zeroAddress)); 
  5.     zeroAddress.sin_len = sizeof(zeroAddress); 
  6.     zeroAddress.sin_family = AF_INET; 
  7.   
  8.     /** 
  9.      *  SCNetworkReachabilityRef: 用来保存创建测试连接返回的引用 
  10.      * 
  11.      *  SCNetworkReachabilityCreateWithAddress: 根据传入的地址测试连接. 
  12.      *  第一个参数可以为NULL或kCFAllocatorDefault 
  13.      *  第二个参数为需要测试连接的IP地址,当为0.0.0.0时则可以查询本机的网络连接状态. 
  14.      *  同时返回一个引用必须在用完后释放. 
  15.      *  PS: SCNetworkReachabilityCreateWithName: 这个是根据传入的网址测试连接, 
  16.      *  第二个参数比如为"www.apple.com",其他和上一个一样. 
  17.      * 
  18.      *  SCNetworkReachabilityGetFlags: 这个函数用来获得测试连接的状态, 
  19.      *  第一个参数为之前建立的测试连接的引用, 
  20.      *  第二个参数用来保存获得的状态, 
  21.      *  如果能获得状态则返回TRUE,否则返回FALSE 
  22.      * 
  23.      */ 
  24.     SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress); 
  25.     SCNetworkReachabilityFlags flags; 
  26.   
  27.     BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags); 
  28.     CFRelease(defaultRouteReachability); 
  29.   
  30.     if (!didRetrieveFlags) 
  31.     { 
  32.         printf("Error. Could not recover network reachability flagsn"); 
  33.         return NO
  34.     } 
  35.   
  36.     /** 
  37.      *  kSCNetworkReachabilityFlagsReachable: 能够连接网络 
  38.      *  kSCNetworkReachabilityFlagsConnectionRequired: 能够连接网络,但是首先得建立连接过程 
  39.      *  kSCNetworkReachabilityFlagsIsWWAN: 判断是否通过蜂窝网覆盖的连接, 
  40.      *  比如EDGE,GPRS或者目前的3G.主要是区别通过WiFi的连接. 
  41.      * 
  42.      */ 
  43.     BOOL isReachable = ((flags & kSCNetworkFlagsReachable) != 0); 
  44.     BOOL needsConnection = ((flags & kSCNetworkFlagsConnectionRequired) != 0); 
  45.     return (isReachable && !needsConnection) ? YES : NO

 

你可能感兴趣的:(网络,检查)