国产探花免费观看_亚洲丰满少妇自慰呻吟_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;

}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 荔浦县| 宾阳县| 水富县| 吉安县| 焦作市| 友谊县| 阜宁县| 辰溪县| 库车县| 怀化市| 平安县| 无极县| 唐山市| 错那县| 金堂县| 南充市| 巨野县| 凤城市| 晋中市| 辉县市| 和林格尔县| 黔南| 澄迈县| 修武县| 郓城县| 天峻县| 额尔古纳市| 布拖县| 阿克陶县| 邓州市| 郎溪县| 津市市| 盐源县| 句容市| 霍林郭勒市| 任丘市| 彭水| 三门县| 集安市| 卫辉市| 山东省|