附件中的代码是在官方的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; }
相关推荐
Reachability是苹果官方提供的一款用于检测iOS设备网络状态的示例代码库,它极大地简化了开发者在应用中检查网络连通性的过程。这个DEMO包含了详细的实现方式和使用示例,帮助开发者理解如何在自己的应用中集成网络...
Reachability 是一个在iOS和macOS开发中广泛使用的开源库,由Tony Million 创建,用于检测设备的网络连通状态和网络类型。这个库基于Apple的SystemConfiguration框架,它提供了简单易用的接口来帮助开发者判断应用...
Reachability是iOS开发中一个非常重要的工具,它用于检测设备的网络可达性,例如Wi-Fi、蜂窝数据等网络状态的变化。这个工具是由斯坦福大学的Scotty Loveless开发的,并且在iOS开发者社区中广泛使用。这篇博客文章...
Reachability 是 iOS 开发中一个重要的工具类,用于检测设备的网络状态,包括无网络、WiFi、蜂窝数据等。这个工具最初由 Tony Million 设计并实现,现在已经被广泛使用在许多 iOS 应用中。在本文中,我们将深入探讨 ...
Reachability是Apple提供的一款工具,用于检测设备的网络可达性,即是否可以连接到互联网。这篇博客文章将深入探讨如何在iOS项目中使用Reachability来监控网络状态,并提供相关的源码分析。 一、 Reachability简介 ...
Reachability是iOS开发中用于检测网络连接状态的一个重要工具,由Tony Million开发并维护,它提供了简单的方法来判断设备当前的网络连通性。在iOS 11及更高版本中,由于苹果对用户隐私的加强保护,不再推荐使用Key-...
Reachability.swift 是一款由Ashley Mills开发的著名第三方库,专为Swift编程语言设计,用于检测iOS、macOS、tvOS以及watchOS等Apple平台上的网络可达性。这个库简化了开发者判断当前设备网络状态的过程,包括是否...
Reachability是iOS开发中一个非常重要的概念,它用于检测设备的网络可达性,即设备是否能够连接到互联网以及通过何种方式连接。这个功能在开发任何需要网络通信的应用时都至关重要,因为它可以帮助应用根据网络状态...
**Swift-Reach:现代Reachability网络库详解** Swift-Reach 是一个专为Swift编程语言设计的现代化网络可达性库,它的主要目标是帮助开发者轻松地检测iOS、macOS、tvOS或watchOS应用的网络状态。这个库是基于Apple的...
Reachability 是 iOS 开发中一个重要的知识点,用于检测设备当前的网络状态,包括是否连接到互联网,以及连接的类型(例如蜂窝数据还是 Wi-Fi)。这个例子是苹果官方提供的,对于开发者来说,是一个非常有价值的参考...
Reachability.swift:使用 Swift 闭包实现的网络状态检查库,可以取代 Apple 的 Reachability 库.zip,Replacement for Apple's Reachability re-written in Swift with closures
IOS 网络编程 ReachAbility头文件和源文件,用于判定网络的连接情况
Reachability是Apple提供的一个库,用于检测设备当前的网络可达性,包括Wi-Fi、蜂窝数据以及互联网是否可达。这个库可以帮助开发者及时响应网络状态的变化,比如在网络断开时提示用户或者暂停网络依赖的操作。 首先...