标签:style blog color io cti div amp size
//检测网络是否有效 - (BOOL) checkNetworkIsValid { 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) { return NO; } BOOL isReachable = flags & kSCNetworkFlagsReachable; BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired; // = flags & kSCNetworkReachabilityFlagsIsWWAN; BOOL nonWifi = flags & kSCNetworkReachabilityFlagsTransientConnection; BOOL moveNet = flags & kSCNetworkReachabilityFlagsIsWWAN; return ((isReachable && !needsConnection) || nonWifi || moveNet) ? YES : NO; }
#import "CheckNetwork.h" #import <netinet/in.h> #import <SystemConfiguration/SCNetworkReachability.h> @implementation CheckNetwork + (BOOL) connectedToNetwork { //创建零地址,0.0.0.0的地址表示查询本机的网络连接状态 struct sockaddr_in zeroAddress; bzero(&zeroAddress, sizeof(zeroAddress)); zeroAddress.sin_len = sizeof(zeroAddress); zeroAddress.sin_family = AF_INET; // 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; BOOL isWWAN = flags & kSCNetworkReachabilityFlagsIsWWAN; return (isReachable && (!needsConnection || isWWAN)) ? YES : NO; }
标签:style blog color io cti div amp size
原文地址:http://www.cnblogs.com/mgbert/p/3892968.html