注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

云水禅心

淡若秋菊何妨瘦, 清到梅花不畏寒.

 
 
 

日志

 
 

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

2013-12-13 18:23:07|  分类: iphone |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
这个类可以用来检测用户是否连接到internet.  用法非常简单,只有一个方法,返回 YES或NO。

一个简单的例子:

  1. if ([Connection isConnected]) {  ...  }      
  2. else {  ...  }   
if ([Connection isConnected]) { ... } 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   
// // 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

类的实现文件:

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

  评论这张
 
阅读(403)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018