From:http://blog.csdn.net/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