iPhone 网络连接检测(Wifi,3G,Edge),功能有点像Reachability

  这个类可以用来检测用户是否连接到internet.  用法非常简单,只有一个方法,返回 YES或NO。

一个简单的例子:

  1. if ([Connection isConnected]) {  ...  }     
  2. else {  ...  }   

这个类的头文件:

  1. //     
  2. //  Connection.h       
  3. //     
  4. #import <Foundation/Foundation.h>     
  5. #import <SystemConfiguration/SystemConfiguration.h>     
  6. #import <netinet/in.h>     
  7. #import <arpa/inet.h>     
  8. #import <netdb.h>     
  9.     
  10. @interface Connection : NSObject {     
  11.     
  12. }     
  13.     
  14. + (BOOL) isConnected;     
  15.     
  16. @end   

类的实现文件:

  1. //     
  2. //  Connection.m    
  3. //     
  4.     
  5. #import "Connection.h"     
  6.     
  7. @implementation Connection     
  8.     
  9. + (BOOL) isConnected {     
  10.     // Create zero addy     
  11.     struct sockaddr_in zeroAddress;     
  12.     bzero(&zeroAddress, sizeof(zeroAddress));     
  13.     zeroAddress.sin_len = sizeof(zeroAddress);     
  14.     zeroAddress.sin_family = AF_INET;     
  15.     // Recover reachability flags     
  16.     SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);     
  17.     SCNetworkReachabilityFlags flags;     
  18.     BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);     
  19.     CFRelease(defaultRouteReachability);     
  20.     if (!didRetrieveFlags) {     
  21.         NSLog(@"Error. Could not recover network reachability flags");     
  22.         return NO;     
  23.     }     
  24.     BOOL isReachable = flags & kSCNetworkFlagsReachable;     
  25.     BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;     
  26.     BOOL nonWiFi = flags & kSCNetworkReachabilityFlagsTransientConnection;     
  27.     NSURL *testURL = [NSURL URLWithString:@"http://www.google.com/"];     
  28.     NSURLRequest *testRequest = [NSURLRequest requestWithURL:testURL  cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:20.0];     
  29.     NSURLConnection *testConnection = [[[NSURLConnection alloc] initWithRequest:testRequest delegate:self] autorelease];     
  30.     return ((isReachable && !needsConnection) || nonWiFi) ? (testConnection ? YES : NO) : NO;     
  31. }     
  32.     
  33. @end    

最后别忘了添加必要的frameworks: SystemConfiguration and libz.1.1.3.dylib

标题中提到的Reachability也具有检测网络的功能。大家可以参考资料:http://www.raddonline.com/blogs/geek-journal/iphone-sdk-testing-network-reachability/

http://blog.csdn.net/favormm/article/details/5352656

posted @ 2011-07-09 10:40  周宏伟  阅读(534)  评论(0编辑  收藏  举报