IOS判断设备是否联网

1.导入SystemConfiguration.framework,并#import<SystemConfiguration/SCNetworkReachability.h>

+ (BOOL)connectedToNetwork
{
       //创建零地址,0.0.0.0的地址表示查询本机的网络连接状态
        
       struct sockaddr_storage zeroAddress;//IP地址
        
       bzero(&zeroAddress, sizeof(zeroAddress));//将地址转换为0.0.0.0
       zeroAddress.ss_len = sizeof(zeroAddress);//地址长度
       zeroAddress.ss_family = AF_INET;//地址类型为UDP, TCP, etc.
        
       // Recover reachability flags
       SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);
       SCNetworkReachabilityFlags flags;
        
       //获得连接的标志
       BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
       CFRelease(defaultRouteReachability);
        
       //如果不能获取连接标志,则不能连接网络,直接返回
       if (!didRetrieveFlags)
          {
            return NO;
        }
       //根据获得的连接标志进行判断
    
       BOOL isReachable = flags & kSCNetworkFlagsReachable;
       BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
       return (isReachable&&!needsConnection) ? YES : NO;
    
    /*
     1、sockaddr_storage
     This structure stores socket address information. Because this structure is large enough to store IPv4 or IPv6 address information, its use promotes protocol-family and protocol-version independence, and simplifies cross-platform development. Use this structure in place of the sockaddr structure.
     
     2、
     extern void bzero(void *s, int n);
     用法:#include <string.h>
     功能:置字节字符串s的前n个字节为零且包括‘\0’。
     说明:bzero无返回值,并且使用string.h头文件,string.h曾经是posix标准的一部分,但是在POSIX.1-2001标准里面,
     这些函数被标记为了遗留函数而不推荐使用。在POSIX.1-2008标准里已经没有这些函数了。推荐使用memset替代bzero。
     
     bzero( &tt, sizeof( tt ) );      //等价于memset(&tt,0,sizeof(tt));
     bzero( s, 20 );                  //等价于memset(s,0,20);
     
     */
}

2.  使用第三方类库请求网络,

#import "Reachability.h"  

-(BOOL)isConnectionAvailable{
    
    BOOL isExistenceNetwork = YES;
    Reachability *reach = [Reachability reachabilityWithHostName:@"http://www.baidu.com"];
    switch ([reach currentReachabilityStatus]) {
        case NotReachable:
            isExistenceNetwork = NO;
            //NSLog(@"notReachable");
            break;
        case ReachableViaWiFi:
            isExistenceNetwork = YES;
            //NSLog(@"WIFI");
            break;
        case ReachableViaWWAN:
            isExistenceNetwork = YES;
            //NSLog(@"3G");
            break;
    }
    

    
    return isExistenceNetwork;
}

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。