iOS网络状态检查,网络连接中所用到的类

使用之前请从Apple网站下载示例:点击进入下载

然后将Reachability.h 和 Reachability.m 加到自己的项目中,并引用 SystemConfiguration.framework,就可以使用了。

Reachability 中定义了3种网络状态:

// the network state of the device for Reachability 1.5.
typedef enum {
    NotReachable = 0,  //无连接
    ReachableViaCarrierDataNetwork, //使用3G/GPRS网络
    ReachableViaWiFiNetwork  //使用WiFi网络
} NetworkStatus;

// the network state of the device for Reachability 2.0.
typedef enum {
    NotReachable = 0,  //无连接
    ReachableViaWiFi,  //使用3G/GPRS网络
    ReachableViaWWAN  //使用WiFi网络
} NetworkStatus;

比如检测某一特定站点的接续状况,可以使用下面的代码:

Reachability *r = [Reachability reachabilityWithHostName:@“www.apple.com”];
switch ([r currentReachabilityStatus]) {
    case NotReachable:
        // 没有网络连接
   { 
       UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"无可用网络" message:@"请先设置可用网络" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];
      [alertView show];
   }
        break;
    case ReachableViaWWAN:
        // 使用3G网络
        break;
    case ReachableViaWiFi:
        // 使用WiFi网络
        break;
}

检测当前网络环境:

// 是否wifi
+ (BOOL) IsEnableWIFI {
    return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);
}

// 是否3G
+ (BOOL) IsEnable3G {
    return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);
}

连接状态实时通知

网络连接状态的实时检查,通知在网络应用中也是十分必要的。接续状态发生变化时,需要及时地通知用户。由于Reachability1.5版与2.0版有一些变化,这里分开来说明使用方法。

Reachability 1.5

// My.AppDelegate.h

#import "Reachability.h"

@interface MyAppDelegate : NSObject <UIApplicationDelegate> {
    NetworkStatus remoteHostStatus;
}

@property NetworkStatus remoteHostStatus;

@end

// My.AppDelegate.m

#import "MyAppDelegate.h"

@implementation MyAppDelegate

@synthesize remoteHostStatus;

// 更新网络状态
- (void)updateStatus {
    self.remoteHostStatus = [[Reachability sharedReachability] remoteHostStatus];
}

// 通知网络状态
- (void)reachabilityChanged:(NSNotification *)note {
    [self updateStatus];
    if (self.remoteHostStatus == NotReachable) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"AppName", nil) message:NSLocalizedString(@"NotReachable", nil)
        delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
        [alert show];
        [alert release];
    }
}

// 程序启动器,启动网络监视
- (void)applicationDidFinishLaunching:(UIApplication *)application {

    // 设置网络检测的站点
    [[Reachability sharedReachability] setHostName:@"www.apple.com"];
    [[Reachability sharedReachability] setNetworkStatusNotificationsEnabled:YES];
    // 设置网络状态变化时的通知函数
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:)
                                                 name:@"kNetworkReachabilityChangedNotification" object:nil];
    [self updateStatus];
}

- (void)dealloc {
    // 删除通知对象
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [window release];
    [super dealloc];
}

Reachability 2.0

// MyAppDelegate.h

@class Reachability;

@interface MyAppDelegate : NSObject <UIApplicationDelegate> {
    Reachability  *hostReach;
}

@end

// MyAppDelegate.m
- (void)reachabilityChanged:(NSNotification *)note {
    Reachability* curReach = [note object];
    NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
    NetworkStatus status = [curReach currentReachabilityStatus];

    if (status == NotReachable) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"AppName""
                                                        message:@"NotReachable"
                                                       delegate:nil
                                              cancelButtonTitle:@"YES" otherButtonTitles:nil];
        [alert show];
        [alert release];
    }
}

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    // ...

    // 监测网络情况
    [[NSNotificationCenter defaultCenter] addObserver:self
                                          selector:@selector(reachabilityChanged:)
                                          name: kReachabilityChangedNotification
                                          object: nil];
    hostReach = [[Reachability reachabilityWithHostName:@"www.google.com"] retain];
    [hostReach startNotifer];
    // ...
}
时间: 2024-11-07 20:24:11

iOS网络状态检查,网络连接中所用到的类的相关文章

iOS开发OC基础:OC中的分类(类目)

//分类,category,(类目) //为没有源代码的类添加方法 //一定要注意,只能添加方法,不能添加实例变量 /** *  分类 类的定义也是分为接口部分和实现部分 接口部分:以@interface开头 + 类名 后跟小括号,小括号内填写的是分类名 @end结束 在@interface 与@end 之间添加方法. */ //分类为原类添加的方法,就相当于原类具有该方法,可以正常调用 因为涉及到几个分类的创建,所以就直接上传代码了,其实代码也不多,只是怕大家在建立分类的时候会混淆,所以直接把

ios网络开发 网络状态检查

http://www.cnblogs.com/hanjun/archive/2012/12/01/2797622.html 网络连接中用到的类: 一.Reachability 1.添加 Reachability 的.h和.m文件,再添加SystemConfiguration.framework. 2.Reachability中定义了三种网络状态: typedef Num{ NotReachable = 0,  //无连接 ReachableViaWiFi,  //使用3G/GPRS网络 Reac

Android Network -------------------判断网络状态(网络的连接,改变,和判断2G/3G/4G)

现在app大多都需要从网络上获得数据.所以访问网络是在所难免.但是再访问网络之前,我们应该先做一下网络的状态判断.其实在访问网络之前我们要做一些状态判断,对应一些状态判断来做处理,并不是直接使用Http访问网络即可.很多人在开发就经常把网络这块直接跳过,直接访问网络,可以一断网,各种体验效果不好,不是说app没法用,只是体验效果差.还有,就是我们可能为用户考虑,因为现在一般连网是wifi和手机流量,都知道后者收费是比较高的.假如我们的app加载的图片或者有大的数据下载操作,可是用户的本意是要是在

【收集用户网络状态】网络诊断工具.bat

@echo off rem ## version 1.9.2 @ 2014/9/12 rem ## via NosmoKing rem 简体中文 chcp 936 >nul color fc title [网络诊断工具]v1.9.2 ^| 多有打扰,敬请谅解 :-) set s_URLS=tmpURLs.txt set s_Date=%date:~5,2%%date:~8,2% set s_Hour=%time:~0,2% if /i %s_Hour% LSS 10 ( set s_Hour=0

iOS UI高级之网络编程(HTTP协议)

HTTP协议的概念 HTTP协议,Hyper Text Transfer Protocol (超文本传输协议)是用于从万维网服务器传送超文本到本地浏览器的传输协议,HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型 了解C/S模式 Client(客户端)和Server(服务器)常常分别处在相距很远的两台计算机上,Client程序的任务是将用户的要求提交给Server程序,再将Server程序返回的结果以特定的形式显示给用户:Server程序的任务是接受客户程序提出的服务请求

Reachability检测网络状态

在现在的项目开发当中,监测网络是否正常非常有必要的.Reachability检测网络可以检测WiFi 3G 无线局域网 使用Reachability 下载Reachability,将Reachability添加到项目当中,在要检测网的类当中添加 #import <Reachability.h> //  开启网络状态的监听 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(reachabilityCh

Linx监控分享--网络状态监控+邮件提醒

网络状态监控 网络状态:netstat 各个状态的总计,详情:以及重点端口的详细连接情况(22,25,80,3306,8080),打印客户端连接数最多的ip. 邮件报告当前状态. 在手机上安装网易的邮件客户端,就可以达到实时提醒的效果. 关于mail的配置,见之前的文章:http://blog.csdn.net/rookie_ceo/article/details/46559195 #!/bin/sh source /etc/profile IP=`/sbin/ifconfig|sed -n '

网络状态判断

- (IBAction)doNetButton:(id)sender { Reachability *hostReach=[Reachability reachabilityWithHostName:@"www.baidu.com"];//网络可达性 NetworkStatus status=[hostReach currentReachabilityStatus];  //网络状态 //判断网络状态 switch (status) { case NotReachable: NSLog

Silverlight项目笔记6:Linq求差集、交集&amp;检查网络连接状态&amp;重载构造函数复用窗口

一.使用Linq求差集.交集 使用场景: 需要从数据中心获得用户数据,并以此为标准,同步系统的用户信息,对系统中多余的用户进行删除操作,缺失的用户进行添加操作,对信息更新了的用户进行编辑操作更新. 所以需要通过对数据中心以及系统现有用户信息进行比较,分为三部分: (1) Linq取差集,找出需要删除的用户数据,进行删除(USERNAME为唯一值字段). 使用的是Except这个方法. (2)使用Linq提供的Intersect方法,取得两个用户集合的交集,遍历检查进行更新. (3)同样再次取差集