2168575 发表于 2015-10-2 09:18:12

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

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



view plain
[*]if () {...}   
[*]else {...}   
  这个类的头文件:



view plain
[*]//   
[*]//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   
  类的实现文件:



view plain
[*]//   
[*]//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 = ;   
[*]    NSURLRequest *testRequest = ;   
[*]    NSURLConnection *testConnection = [[ 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://blog.iyunv.com/favormm/article/details/5352656
页: [1]
查看完整版本: iPhone 网络连接检测(Wifi,3G,Edge),功能有点像Reachability