现在的位置: 首页 > 综合 > 正文

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

2018年08月01日 ⁄ 综合 ⁄ 共 2064字 ⁄ 字号 评论关闭

From:http://blog.csdn.net/favormm/archive/2010/03/06/5352656.aspx

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

一个简单的例子:

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 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

发表于 @ 20100306日 20:50:00 

抱歉!评论已关闭.