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

这个类可以用来检测用户是否连接到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, (struct sockaddr *)&zeroAddress);   

    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] initWithRequest:testRequest delegate:self] autorelease];   

    return ((isReachable && !needsConnection) || nonWiFi) ? (testConnection ? YES : NO) : NO;   

}   



@end  

最后别忘了添加必要的frameworks: SystemConfiguration and libz.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

你可能感兴趣的:(Reachability)