附件中的代码是在官方的Reachability 2.2版的基础上增加了以下几个方法:
+ (NSString *) stringFromAddress:(const struct sockaddr *)address{ if (address && address->sa_family == AF_INET) { const struct sockaddr_in* sin = (struct sockaddr_in *)address; return [NSString stringWithFormat:@"%@:%d",[NSString stringWithUTF8String:inet_ntoa(sin->sin_addr)],ntohs(sin->sin_port)]; } return nil; } + (BOOL) addressFromString:(NSString *)IPAddress address:(struct sockaddr_in *)address{ if (!IPAddress || [IPAddress length]) { return NO; } memset((char *)address,sizeof(struct sockaddr_in),0); address->sin_family = AF_INET; address->sin_len = sizeof(struct sockaddr_in); int conversionResult = inet_aton([IPAddress UTF8String],&address->sin_addr); if (conversionResult == 0) { NSAssert1(conversionResult != 1,@"Failed to convert the IP Address string into a sockaddr_in:%@",IPAddress); return NO; } return YES; } + (NSString *) hostname{ char baseHostName[256]; int success = gethostname(baseHostName,255); if (success != 0 ) { return nil; } baseHostName[255] = '\0'; #if !TARGET_IPHONE_SIMULATOR return [NSString stringWithFormat:@"%s.local",baseHostName]; #else return [NSString stringWithFormat:@"%s",baseHostName]; #endif } + (NSString *) getIPAddressForHost:(NSString *)theHost{ struct hostent *host = gethostbyname([theHost UTF8String]); if (!host) { herror("resolv"); return NULL; } struct in_addr **list = (struct in_addr **)host->h_addr_list; return [NSString stringWithCString:inet_ntoa(*list[0]) encoding:NSUTF8StringEncoding]; } + (NSString *) localIPAddress{ struct hostent *host = gethostbyname([[self hostname] UTF8String]); if (!host) { herror("resolv"); return nil; } struct in_addr **list = (struct in_addr **)host->h_addr_list; return [NSString stringWithCString:inet_ntoa(*list[0]) encoding:NSUTF8StringEncoding]; } + (NSString *) localWiFiIPAddress{ BOOL success; struct ifaddrs * addrs; const struct ifaddrs * cursor; success = getifaddrs(&addrs) == 0; if (success) { cursor = addrs; while (cursor != NULL) { if (cursor->ifa_addr->sa_family == AF_INET && (cursor->ifa_flags & IFF_LOOPBACK) == 0) { NSString *name = [NSString stringWithUTF8String:cursor->ifa_name]; if([name isEqualToString:@"en0"]){ return [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)cursor->ifa_addr)->sin_addr)]; } } cursor = cursor->ifa_next; } freeifaddrs(addrs); } return nil; } + (BOOL) hostAvailable:(NSString *)theHost{ NSString *addressString = [self getIPAddressForHost:theHost]; if (!addressString) { printf("Error recovering IP address from host name\n"); return NO; } struct sockaddr_in address; BOOL gotAddress = [self addressFromString:addressString address:&address]; if (!gotAddress) { printf("Error recovering sockaddr address from %s\n",[addressString UTF8String]); return NO; } SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&address); SCNetworkReachabilityFlags flags; BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags); CFRelease(defaultRouteReachability); if (!didRetrieveFlags) { printf("Error Could not recover network reachablility flags\n"); return NO; } BOOL isReachable = flags & kSCNetworkFlagsReachable; return isReachable ? YES:NO; }
相关推荐
苹果官方提供的网络检测DEMO Reachability.zip
Reachability 判断当前应用网络是否连接 以及当前网络处于什么网络环境(2G 或 WIFI)
Reachability 网络状态的使用和封装,更加方便使用
Reachability.swift:使用 Swift 闭包实现的网络状态检查库,可以取代 Apple 的 Reachability 库.zip,Replacement for Apple's Reachability re-written in Swift with closures
Reach 一个现代Reachability网络库
IOS 网络编程 ReachAbility头文件和源文件,用于判定网络的连接情况
Reachability.swift 是一个使用Swift写的第三方网络检测类,可以用来检测网络连接状态及网络类型(移动网络、Wifi)功能。
本文档介绍在大规模图数据库中计算标签可达性约束的查询问题。
其中Reachability.Position.RIGHT是设置悬浮按钮的外置,有3中选择:Reachability.Position.RIGHT: 底端偏右Reachability.Position.LEFT:底端偏左Reachability.Position.CENTER:底端水平居中
NULL 博文链接:https://zcw-java.iteye.com/blog/1878659
Reachability 网络的判断监听
Reachability-master.zip
Reachability 2.0版本,确认网络环境3G/WIFI 使用NSConnection下载数据 使用NSXMLParser解析xml文件