IOS 检测网络链接是否可用 - 3

来源:互联网 发布:暖脚宝哪个牌子好 知乎 编辑:程序博客网 时间:2024/05/20 17:07
在上面两篇中介绍了如何获取网络状态与sock的简单介绍,到此大概对socket有一点了解,下面介绍ios的

SCNetworkReachability类的应用,在IOS中SystemConfiguration框架包含联网相关的函数,可以检查网络连接状态。在

SCNetworkReachability.h定义测试网络连接状态的函数,具体看下面:


一:创建测试网络引用

(1)SCNetworkReachabilityRef       SCNetworkReachabilityCreateWithAddress (     //根据传入的地址创建网络连接引用
    CFAllocatorRef allocator,                        //可以为NULL或kCFAllocatorDefault
    const struct sockaddr *address  //需要测试连接的IP地址

    );    

     注意:当address为0.0.0.0时则可以查询本机的网络连接状态。同时返回一个引用必须在用完后释放。

(2)SCNetworkReachabilityRef     SCNetworkReachabilityCreateWithName (         //根据传入的网址创建网络连接引用
  CFAllocatorRef allocator,//可以为NULL或kCFAllocatorDefault
  const char *nodename//比如为"www.baidu.com",此参数为域名

     );    

注意:当address为0.0.0.0时则可以查询本机的网络连接状态。同时返回一个引用必须在用完后释放。


释放用 CFRelease(SCNetworkReachabilityRef  ref );


二:获取网络连接状态(是否存在网络连接):
Boolean SCNetworkReachabilityGetFlags (          //用来获得网络连接的状态
    SCNetworkReachabilityRef target,//之前建立的网络连接的引用
    SCNetworkReachabilityFlags *flags//保存确定连接是否获得的状态
);   


SCNetworkReachabilityFlags:保存返回的测试连接状态
其中常用的状态有:
kSCNetworkReachabilityFlagsReachable:能够连接网络
kSCNetworkReachabilityFlagsConnectionRequired:能够连接网络,但是首先得建立连接过程
kSCNetworkReachabilityFlagsIsWWAN:判断是否通过蜂窝网覆盖的连接,比如EDGE,GPRS或者目前的3G.主要是区别通过WiFi的连接。
原创粉丝点击