iOS利用Reachability确认网络环境3G/WIFI

开发Web等网络应用程序的时候,需要确认网络环境,连接情况等信息。如果没有处理它们,是不会通过Apple的审查的,一般情况下,可以把网络监听放在程序启动时执行。

Apple 的 例程 Reachability 中介绍了取得/检测网络状态的方法。在你的程序中使用 Reachability 只须将该例程中的 Reachability.h 和 Reachability.m 拷贝到你的工程中。如下图:

我们来看看Reachability.h文件中的具体内容:

#import <Foundation/Foundation.h>
#import <SystemConfiguration/SystemConfiguration.h>//! Project version number for MacOSReachability.
FOUNDATION_EXPORT double ReachabilityVersionNumber;//! Project version string for MacOSReachability.
FOUNDATION_EXPORT const unsigned char ReachabilityVersionString[];/** * Create NS_ENUM macro if it does not exist on the targeted version of iOS or OS X.** @see http://nshipster.com/ns_enum-ns_options/**/
#ifndef NS_ENUM
#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type
#endifextern NSString *const kReachabilityChangedNotification;//但前网络类型
typedef NS_ENUM(NSInteger, NetworkStatus) {// Apple NetworkStatus Compatible Names.NotReachable = 0,ReachableViaWiFi = 2,ReachableViaWWAN = 1
};@class Reachability;typedef void (^NetworkReachable)(Reachability * reachability);
typedef void (^NetworkUnreachable)(Reachability * reachability);
typedef void (^NetworkReachability)(Reachability * reachability, SCNetworkConnectionFlags flags);@interface Reachability : NSObject@property (nonatomic, copy) NetworkReachable    reachableBlock;
@property (nonatomic, copy) NetworkUnreachable  unreachableBlock;
@property (nonatomic, copy) NetworkReachability reachabilityBlock;@property (nonatomic, assign) BOOL reachableOnWWAN;//类方法创建网络监听对象
+(instancetype)reachabilityWithHostname:(NSString*)hostname;
// This is identical to the function above, but is here to maintain
//compatibility with Apples original code. (see .m)
+(instancetype)reachabilityWithHostName:(NSString*)hostname;
+(instancetype)reachabilityForInternetConnection;
+(instancetype)reachabilityWithAddress:(void *)hostAddress;
+(instancetype)reachabilityForLocalWiFi;//实例方法传附件网络监听对象
-(instancetype)initWithReachabilityRef:(SCNetworkReachabilityRef)ref;-(BOOL)startNotifier;     //开始监听网络
-(void)stopNotifier;      //停止监听网络-(BOOL)isReachable;        //是否没有网
-(BOOL)isReachableViaWWAN; //是否使自带的网络
-(BOOL)isReachableViaWiFi; //是否是WIFI// WWAN may be available, but not active until a connection has been established.
// WiFi may require a connection for VPN on Demand.
-(BOOL)isConnectionRequired; // Identical DDG variant.
-(BOOL)connectionRequired; // Apple's routine.
// Dynamic, on demand connection?
-(BOOL)isConnectionOnDemand;
// Is user intervention required?
-(BOOL)isInterventionRequired;-(NetworkStatus)currentReachabilityStatus;     //获取当前网络状态
-(SCNetworkReachabilityFlags)reachabilityFlags;//
-(NSString*)currentReachabilityString;//当前网络字符串
-(NSString*)currentReachabilityFlags; //当前网络标识@end

下面我们用代码实现一下对自己主机的网络的监听

方法一:直接使用Reachability这两个文件

//  网络状态监听
//
//  Created by ma c on 16/01/29.
//  Copyright (c) 2016年 XYQ. All rights reserved.
//
#import "AppDelegate.h"
#import "Reachability.h"
@interface AppDelegate ()
@property(nonatomic,strong)Reachability *reachability; //网络监听对象
@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {//创建网络监听[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkStateChange) name:kReachabilityChangedNotification object:nil];//创建网络监听对象self.reachability = [Reachability reachabilityForInternetConnection];//self.reachablity = [Reachability reachabilityWithHostName:@"localhost"]; //本机网络//开始检测
    [self.reachability startNotifier];return YES;
}
//监听网络类型
-(void)NetWorkState
{if ([self.reachablity isReachableViaWiFi]) {NSLog(@"是WIFI");}else if([self.reachablity isReachableViaWWAN]){NSLog(@"是WWAN");}else{NSLog(@"没有网");}
}//网络链接改变时会调用的方法
-(void)reachabilityChanged:(NSNotification *)note
{[self NetWorkState];Reachability *currReach = [note object];NSParameterAssert([currReach isKindOfClass:[Reachability class]]);//对连接改变做出响应处理动作NetworkStatus status = [currReach currentReachabilityStatus];//如果没有连接到网络就弹出提醒实况self.isReachable = YES;if(status == NotReachable){UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"网络连接异常" message:@"暂无法访问" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];[alert show];self.isReachable = NO;}else{UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"网络连接信息" message:@"网络连接正常" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];[alert show];self.isReachable = YES;}
}-(void)dealloc
{//停止监听,并移除通知
    [self.reachablity stopNotifier];[[NSNotificationCenter defaultCenter]removeObserver:self];
}
@end

输出结果如下:我的电脑连接的就是WIFI

2016-01-29 16:20:18.779 网络状态监听[4854:325480] 是WIFI

方法二:使用第三方库AFNetworing封装的网络监听方法,创建网络监听管理者进行监听

如何使用AFNetworking做网络监控呢?AFNetworkReachabilityManager这个类中自带着监听网络的方法,同时AFNetworkReachabilityManager还拥有一个枚举,代表着网络状况.

typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {AFNetworkReachabilityStatusUnknown = -1,//未识别的网络

AFNetworkReachabilityStatusNotReachable = 0,//不可达的网络(未连接)

AFNetworkReachabilityStatusReachableViaWWAN = 1,//2G,3G,4G...

AFNetworkReachabilityStatusReachableViaWiFi = 2,//wifi网络

};

下面进行监听:
#import "AppDelegate.h"
#import <AFNetworking/AFNetworkReachabilityManager.h>@interface AppDelegate ()@property(nonatomic,strong)AFNetworkReachabilityManager *reachabilityManager;@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {//创建网络监控对象self.reachabilityManager = [AFNetworkReachabilityManager sharedManager];//设置监听[_reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {switch (status) {case AFNetworkReachabilityStatusUnknown:NSLog(@"未识别的网络");break;case AFNetworkReachabilityStatusNotReachable:NSLog(@"不可达的网络(未连接)");break;case AFNetworkReachabilityStatusReachableViaWWAN:NSLog(@"2G,3G,4G...的网络");break;case AFNetworkReachabilityStatusReachableViaWiFi:NSLog(@"wifi的网络");break;default:break;}}];//开始监听网络状况.
    [_reachabilityManager startMonitoring];return YES;
}-(void)dealloc{//停止监听网络状况.
    [_reachabilityManager stopMonitoring];}

总结:与Reachability相比之下,AFNetworking是不是代码更加的简练呢?AFNetworking其实封装了Reachability,使我们的代码更加的简单易上手.

转载于:https://www.cnblogs.com/XYQ-208910/p/5169362.html

iOS:Reachability网络监听相关推荐

  1. iOS开发之网络监听(一)Reachability

    demo下载 Reachability对系统的网络状况类SCNetworkReachability进行的封装,持有全局的网络状况句柄reachabilityRef,简化了SCNetworkReacha ...

  2. 8月第1周安全回顾 0Day漏洞成企业最大威胁 应重视网络监听

    文章同时发表在:[url]http://netsecurity.51cto.com/art/200708/52822.htm[/url] 本周(0730至0805)安全方面值得关注的新闻集中在安全管理 ...

  3. chromedp网络监听_动态爬虫三:监听网络事件 + 监听js事件

    一: 概述 上两篇文章介绍了cdp协议和chromedp库,从这篇文章开始动手实战一下,我们要拿到页面上更多的网络请求,最直接的想法就是类似于开发者工具里的network,只有一有网络请求就显示在列表 ...

  4. 网络监听listen技术是什么原理?

    原理 Ethernet协议的工作方式是将要发送的数据包发往连接在一起的所有主机.在包头中包括有应该接收数据包的主机的正确地址,因为只有与数据包中目标地址一致的那台主机才能接收到信息包,但是当主机工作在 ...

  5. 长角牛网络监听 arp欺骗

    一.原理 arp欺骗和攻击的原理是一样的,都是向目标计算机投毒,发送虚假ip地址对应的mac地址,致使被投毒计算机数据被窃听或者数据被盗取. 多数情况欺骗和攻击会发生在计算机和网关的连接过程中,给目标 ...

  6. 【网络与系统安全实验】网络监听及防御技术

    网络监听及防御技术 网络监听概述 基础知识 网络监听的概念 网络监听技术又叫做网络嗅探技术,顾名思义这是一种在他方未察觉的情况下捕获其通信报文或通信内容的技术. 在网络安全领域,网络监听技术对于网络攻 ...

  7. 网络监听的防护(电脑篇)

    网络监听原理: 监视网络所处状态.数据流向以及网络上信息传输.当有人登录网络主机并取得超级用户权限后,如果想要登录其他主机,使用网络监听工具,网卡自动置为混杂模式,可以有效的截取网络上的数据. 工作方 ...

  8. 网络攻防---信息收集----网络查点与网络监听技术

    网络查点 网络监听技术 听课笔记--<网络攻击与防御> 网络查点:根据网络扫描的结果进一步地对目标主机的服务以及系统版本等信息进行更具针对性的检测,来寻找真正可以攻击的入口,以及攻击过程中 ...

  9. 网络监听技术与常规测试方法

    兰色雪狐(mouduan007@sina.com) 一.网络监听技术概述 网络监听(Monitor)在网络安全上一直是一个比较敏感的话题,作为一种发展比较成熟的技术,监听在协助网络管理员监测网络传输数 ...

  10. Android Glide加载图片、网络监听、设置资源监听

    Glide加载图片.加载进度监听 前言 正文 一.项目配置 二.显示网络图片 三.添加设置资源监听 四.添加设置资源监听 五.添加加载进度条 六.封装工具类 七.源码 总结 前言   在日常开发中使用 ...

最新文章

  1. IE9(测试版)浏览器实用快捷键使用方法
  2. matlab四条曲线围成面,matlab中怎么给四条曲线作出图例啊?求大神指导
  3. python 遍历目录或文件
  4. python最小公倍数 菜鸟_最小公倍数 golang + python
  5. android 适合mvp模式,Android中的MVP:如何使Presenter层系统化?
  6. 通过反射获取方法返回的类型
  7. 启动activity的标准的action常量及对应的字符串
  8. 尤其适合程序员使用的TextMate for Mac
  9. 了解JQuery TextArea的取值与赋值问题
  10. 实际开发的存储过程_实际生产中的 Android SDK开发总结| 完结
  11. MySQL8.0.14 - 新特性 - InnoDB Parallel Read简述 1
  12. python源码中的学习笔记_第6章_元组
  13. 实习也能这样过!节选
  14. 大事件!35的程序员竟然失去了面试资格,这是为什么?
  15. IAR for STM8安装教程
  16. 电商峰值系统架构设计--转载
  17. PaddlePaddle:CNN对Cifar10图像分类(1)
  18. VS2012 打开项目后无法编辑
  19. V-By-One协议说明
  20. 【计算机网络】第三部分 数据链路层(18) 虚电路网络:帧中继和ATM

热门文章

  1. MEF(Managed Extensibility Framework)学习笔记
  2. 数据分类是否一定要求样本均衡
  3. AAAI2021-基于对比学习的三元组生成式抽取方法
  4. 【Pre-Training】XLNet:预训练最强,舍我其谁
  5. 20191126_1_电影票房分析
  6. pip太慢豆瓣下载地址
  7. 当年如果有这个,语文就不会不及格了
  8. [NAACL18]What's Going On in Neural Constituency Parsers? An Analysis(神经成分句法分析器的一些分析)...
  9. 《MYSQL必知必会》—10~13.创建计算字段、使用数据处理函数、使用聚集函数汇总数据,使用GROUP BY与HAVING分组数据及过滤
  10. python—将array格式图片保存至文件夹中