国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

SCNetworkReachability簡單說明

2019-11-09 17:58:59
字體:
來源:轉載
供稿:網友

在douban應用中,需要聯網是必須的,看書發現,apple對于需要聯網的應用要求很高,必須要進行聯網檢查,現在還任務在身,但是忙中抽閑,看了看SCNetworkReachability,用于進行聯網檢查的。下面記錄一下。

說明引用網上網友的,特此注明、、、

一.基本知識

在需要聯網的iphone程序中,我們首先需要檢查網絡的狀態,如果不能連接網絡則告訴用戶程序不能使用的原因是沒有網絡連接。在iPhone的SystemConfiguration框架里有提供了和聯網相關的函數,可以用來檢查網絡的連接狀態。

二.具體介紹

1.SCNetworkReachability介紹

SystemConfiguration框架中和測試網絡連接狀態相關的函數定義在SCNetworkReachability.H文件中,主要的函數有以下幾個:

(1)創建測試連接的引用:

(a)SCNetworkReachabilityRef SCNetworkReachabilityCreateWithAddress (

CFAllocatorRef allocator,

const struct sockaddr *address

);

根據傳入的地址測試連接,第一個參數可以為NULL或kCFAllocatorDefault,第二個參數為需要測試連接的IP地址,當為0.0.0.0時則可以查詢本機的網絡連接狀態。同時返回一個引用必須在用完后釋放。

(b)SCNetworkReachabilityRef SCNetworkReachabilityCreateWithName (

CFAllocatorRef allocator,

const char *nodename

);

這個是根據傳入的網址測試連接,第二個參數比如為"www.apple.com",其他和上一個一樣。

(2)確定連接的狀態:

Boolean SCNetworkReachabilityGetFlags (

SCNetworkReachabilityRef target,

SCNetworkReachabilityFlags *flags

);

這個函數用來獲得測試連接的狀態,第一個參數為之前建立的測試連接的引用,第二個參數用來保存獲得的狀態,如果能獲得狀態則返回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;

return (isReachable && !needsConnection) ? YES : NO;

}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 江北区| 庆城县| 和硕县| 科尔| 剑河县| 青阳县| 鄂托克前旗| 略阳县| 肥西县| 汪清县| 垫江县| 临沧市| 泸定县| 绵竹市| 南昌市| 秀山| 呈贡县| 五台县| 凤山县| 黑龙江省| 时尚| 新乡县| 上犹县| 临海市| 闵行区| 肃宁县| 永年县| 定西市| 雷州市| 四会市| 西城区| 木里| 绥化市| 抚远县| 砚山县| 朝阳市| 嘉荫县| 南康市| 南康市| 读书| 临潭县|