SCNetworkReachability 说明使用
来源:互联网 发布:煤矿生产能力数据库 编辑:程序博客网 时间:2024/06/07 07:03
转载▼
标签: CFAllocatorRefallocator, const struct sockaddr*address CFAllocatorRefallocator, const char*nodename SCNetworkReachabilityReftarget, SCNetworkReachabilityFlags *flags
杂谈
分类:iOS一.基本知识
在需要联网的iPhone程序中,我们首先需要检查网络的状态,如果不能连接网络则告诉用户程序不能使用的原因是没有网络连接。在iPhone的SystemConfiguration框架里有提供了和联网相关的函数,可以用来检查网络的连接状态。
二.具体介绍
1.SCNetworkReachability介绍
SystemConfiguration框架中和测试网络连接状态相关的函数定义在SCNetworkReachability.H文件中,主要的函数有以下几个:
(1)创建测试连接的引用:
(a)SCNetworkReachabilityRefSCNetworkReachabilityCreateWithAddress (
);
根据传入的地址测试连接,第一个参数可以为NULL或kCFAllocatorDefault,第二个参数为需要测试连接的IP地址,当为0.0.0.0时则可以查询本机的网络连接状态。同时返回一个引用必须在用完后释放。
(b)SCNetworkReachabilityRefSCNetworkReachabilityCreateWithName (
);
这个是根据传入的网址测试连接,第二个参数比如为"www.apple.com",其他和上一个一样。
(2)确定连接的状态:
Boolean SCNetworkReachabilityGetFlags (
);
这个函数用来获得测试连接的状态,第一个参数为之前建立的测试连接的引用,第二个参数用来保存获得的状态,如果能获得状态则返回TRUE,否则返回FALSE
(3)主要的数据类型介绍:
SCNetworkReachabilityRef:用来保存创建测试连接返回的引用
(4)主要常量介绍:
SCNetworkReachabilityFlags:保存返回的测试连接状态
其中常用的状态有:
kSCNetworkReachabilityFlagsReachable:能够连接网络
kSCNetworkReachabilityFlagsConnectionRequired:能够连接网络,但是首先得建立连接过程
kSCNetworkReachabilityFlagsIsWWAN:判断是否通过蜂窝网覆盖的连接,比如EDGE,GPRS或者目前的3G.主要是区别通过WiFi的连接。
2.代码例子
因此判断是否已经联网的代码例子可以如下所示:
+ (BOOL) connectedToNetwork
{
//创建零地址,0.0.0.0的地址表示查询本机的网络连接状态
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)
{
return NO;
}
//根据获得的连接标志进行判断
BOOL isReachable = flags &kSCNetworkFlagsReachable;
BOOL needsConnection = flags &kSCNetworkFlagsConnectionRequired;
BOOL wwanConnection = ((flags & kSCNetworkReachabilityFlagsIsWWAN) != 0);
if (isReachable)
{
if (needsConnection)
{
/*self.beforeNetType = NET_WIFE_NEEDCON;
self.currentNetType = NET_WIFE_NEEDCON;
[SHServer instance].beforeNetType = NET_WIFE_NEEDCON;*/
return NET_WIFE_NEEDCON;
}
else
{
if (wwanConnection)
{
/*self.beforeNetType = NET_WWAN;
self.currentNetType = NET_WWAN;
[SHServer instance].beforeNetType = NET_WWAN;*/
return NET_WWAN;
}
else
{
/*self.beforeNetType = NET_WIFE;
self.currentNetType = NET_WIFE;
[SHServer instance].beforeNetType = NET_WIFE;*/
return NET_WIFE;
}
}
}
else
{
/*self.beforeNetType = NET_NONE;
self.currentNetType = NET_NONE;*/
return NET_NONE;
}
BOOL wwanConnection = ((flags & kSCNetworkReachabilityFlagsIsWWAN) != 0);
if (isReachable)
{
if (needsConnection)
{
/*self.beforeNetType = NET_WIFE_NEEDCON;
self.currentNetType = NET_WIFE_NEEDCON;
[SHServer instance].beforeNetType = NET_WIFE_NEEDCON;*/
return NET_WIFE_NEEDCON;
}
else
{
if (wwanConnection)
{
/*self.beforeNetType = NET_WWAN;
self.currentNetType = NET_WWAN;
[SHServer instance].beforeNetType = NET_WWAN;*/
return NET_WWAN;
}
else
{
/*self.beforeNetType = NET_WIFE;
self.currentNetType = NET_WIFE;
[SHServer instance].beforeNetType = NET_WIFE;*/
return NET_WIFE;
}
}
}
else
{
/*self.beforeNetType = NET_NONE;
self.currentNetType = NET_NONE;*/
return NET_NONE;
}
}
0 0
- SCNetworkReachability 说明使用
- SCNetworkReachability 说明使用
- SCNetworkReachability 说明使用
- SCNetworkReachability 说明使用
- SCNetworkReachability 说明使用
- IOS学习之SCNetworkReachability 说明使用
- SCNetworkReachability 使用
- SCNetworkReachability简单说明
- SCNetworkReachability
- SCNetworkReachability
- SCNetworkReachability OverView
- SCNetworkReachability 使用说明
- SCNetworkReachability与RealReachability示例整理
- 用SCNetworkReachability判断联网状态
- IOS socket 判断网络连接(SCNetworkReachability)
- IOS SCNetworkReachability和Reachability监测网络连接状态
- CTreeCtrl使用详细说明
- zhcon使用简要说明
- OpenGL ES之着色器语言的内建函数
- /etc/fstab 文件解释
- JavaScript正则表达式
- Bug Check Code Reference
- [LeetCode]026-Remove Duplicates from Sorted Array
- SCNetworkReachability 说明使用
- 使用Reachbility判断当前网络状态
- ios加密后的数据保存本地,解密时为何失败
- FMDB 动态的添加数据
- 学习链接
- RSA加密原理
- 如何将数据保存到iphone中,app删除后,数据依然存在,
- Attempting to access AsyncSocket instance from incorrect thread.
- 《将博客搬至CSDN》
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
木心是谁
木心作品
木心名言
木心图片
沐心
木心的画
成为木心
木恒作品
木恒
我被系统托管了 木恒
我把系统安排了 木恒
我被系统托管了木恒
木房子
驭房有木免费阅读
驭房木免费阅读
木房别墅设计图
手工木房图片
铝包木阳光房价格
恋木淋浴房
木房图片
驭房有木txt免费全文下载
木房装修
铝木阳光房
防腐木房
木门烤漆房价格
木房别墅图片
木房
托木斯克核事故
托木斯克
木托
空调木托
空调木托价格
管道防腐木托
木托牌
木托图片
木料加工
红花梨木料
海黄木料
木料破碎机
木料批发
木料怎么算方