From:http://blog.youkuaiyun.com/favormm/archive/2010/03/06/5352656.aspx
这个类可以用来检测用户是否连接到internet. 用法非常简单,只有一个方法,返回 YES或NO。
一个简单的例子:
if ([Connection isConnected]) { ... }
else { ... }
这个类的头文件:
| // |
| // Connection.h |
| #import <Foundation/Foundation.h> |
| #import <SystemConfiguration/SystemConfiguration.h> |
| #import <netinet/in.h> |
| #import <arpa/inet.h> |
| #import <netdb.h> |
| @interface Connection : NSObject { |
| } |
| + (BOOL) isConnected; |
| @end |
类的实现文件:
| // |
| // Connection.m |
| // |
| #import "Connection.h" |
| @implementation Connection |
| + (BOOL) isConnected { |
| // Create zero addy |
| 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, |
| SCNetworkReachabilityFlags flags; |
| BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags); |
| CFRelease(defaultRouteReachability); |
| if (!didRetrieveFlags) { |
| NSLog(@"Error. Could not recover network reachability flags"); |
| return NO; |
| } |
| BOOL isReachable = flags & kSCNetworkFlagsReachable; |
| BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired; |
| BOOL nonWiFi = flags & kSCNetworkReachabilityFlagsTransientConnection; |
| NSURL *testURL = [NSURL URLWithString:@"http://www.google.com/"]; |
| NSURLRequest *testRequest = [NSURLRequest requestWithURL:testURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:20.0]; |
| NSURLConnection *testConnection = [[[NSURLConnection alloc] |
| return ((isReachable && !needsConnection) || nonWiFi) ? (testConnection ? YES : NO) : NO; |
| } |
| @end |
最后别忘了添加必要的frameworks: SystemConfiguration andlibz.1.1.3.dylib
标题中提到的Reachability也具有检测网络的功能。大家可以参考资料:
http://www.raddonline.com/blogs/geek-journal/iphone-sdk-testing-network-reachability/
http://developer.apple.com/iphone/library/samplecode/Reachability/index.html
发表于 @ 2010年03月06日 20:50:00
本文介绍了一个简单的Objective-C类,用于检测设备是否连接到Internet。通过创建一个零地址并使用System Configuration框架来检查网络可达性标志,进而判断是否有网络连接。此外,还尝试访问一个测试URL以进一步确认网络连接的有效性。
1002

被折叠的 条评论
为什么被折叠?



