三种网络检测举例

本来没有这个文章的,只是最近遇到这样的一个问题:一直都是使用官方的网络检测代码(Reachability库),没有问题。只是最近在ios5下,在程序启动的时候需要检测网络,但是发布证书下的release版本下检测网络就直接退出。

 先枚举三种网络检测形式:

1。直接使用官方库。

  .h文件

  #import "Reachability.h"

包含SystemConfiguration.framework

.m文件

//YES: 有效网络 NO:无网络
- (BOOL)CheckNetWork {
    Reachability *r = [Reachability reachabilityWithHostName:@"www.apple.com"];
    switch ([r currentReachabilityStatus]) {
        case NotReachable: {
            NSLog(@"没有网络连接");
        }
            return NO;
            break;
        case ReachableViaWWAN:
            NSLog(@"使用3G网络");
            return YES;
            break;
        case ReachableViaWiFi:
            NSLog(@"使用WiFi网络");
            return YES;
            break;
    }
    return NO;
}


2。1的另一种表示形式:(采用通知的形式)

     .h文件

        #import "Reachability.h"

       包含SystemConfiguration.framework

      Reachability* hostReach;

   .m文件

- (void)viewDidLoad {
    [super viewDidLoad];

        [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(checkNetWork:)
                                                 name: kReachabilityChangedNotification
                                               object: nil];
        
       hostReach = [[Reachability reachabilityWithHostName:@"http://www.baidu.com/"] retain];
       [hostReach startNotifier];



   - (void)checkNetWork:(NSNotification *)note {
    
    Reachability* curReach = [note object];
    NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
    NetworkStatus status = [curReach currentReachabilityStatus];
    if (status == NotReachable) {
          无网络
    }
    else {
         有网络
    }
    [hostReach stopNotifier];
}


3。阻塞式网络检测(适用于程序启动的时候,必须检测到网络才继续使用的情况)

.m文件

#define kCheckNet      @“NetWork”

- (void)viewDidLoad {
    [super viewDidLoad];

      [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(checkNetWork:)
                                                 name:kCheckNet
                                               object:nil];
    
      [self performSelector:@selector(delayCheckNetWork) withObject:nil afterDelay:0.5]; //为了刷新界面用

- (void)delayCheckNetWork {
    [[NSNotificationCenter defaultCenter] postNotificationName:kCheckNet object:nil];
}


- (BOOL)MyNetCheck {
    NSURL *url = [NSURL URLWithString:@"http://www.baidu.com/"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:10];
    NSHTTPURLResponse *response;
    [NSURLConnection sendSynchronousRequest:request returningResponse: &response error: nil];
    if (response == nil) {
            return NO;
    }
    return YES;
}


- (void)checkNetWork:(NSNotification *)note {
    
    if (![self MyNetCheck]) {
        //无网络
    }
    else {
       //有网络
    }



你可能感兴趣的:(三种网络检测举例)