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

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

SCNetworkReachability簡(jiǎn)單說明

2019-11-09 18:52:30
字體:
供稿:網(wǎng)友

在douban應(yīng)用中,需要聯(lián)網(wǎng)是必須的,看書發(fā)現(xiàn),apple對(duì)于需要聯(lián)網(wǎng)的應(yīng)用要求很高,必須要進(jìn)行聯(lián)網(wǎng)檢查,現(xiàn)在還任務(wù)在身,但是忙中抽閑,看了看SCNetworkReachability,用于進(jìn)行聯(lián)網(wǎng)檢查的。下面記錄一下。

說明引用網(wǎng)上網(wǎng)友的,特此注明、、、

一.基本知識(shí)

在需要聯(lián)網(wǎng)的iphone程序中,我們首先需要檢查網(wǎng)絡(luò)的狀態(tài),如果不能連接網(wǎng)絡(luò)則告訴用戶程序不能使用的原因是沒有網(wǎng)絡(luò)連接。在iPhone的SystemConfiguration框架里有提供了和聯(lián)網(wǎng)相關(guān)的函數(shù),可以用來檢查網(wǎng)絡(luò)的連接狀態(tài)。

二.具體介紹

1.SCNetworkReachability介紹

SystemConfiguration框架中和測(cè)試網(wǎng)絡(luò)連接狀態(tài)相關(guān)的函數(shù)定義在SCNetworkReachability.H文件中,主要的函數(shù)有以下幾個(gè):

(1)創(chuàng)建測(cè)試連接的引用:

(a)SCNetworkReachabilityRef SCNetworkReachabilityCreateWithAddress (

CFAllocatorRef allocator,

const struct sockaddr *address

);

根據(jù)傳入的地址測(cè)試連接,第一個(gè)參數(shù)可以為NULL或kCFAllocatorDefault,第二個(gè)參數(shù)為需要測(cè)試連接的IP地址,當(dāng)為0.0.0.0時(shí)則可以查詢本機(jī)的網(wǎng)絡(luò)連接狀態(tài)。同時(shí)返回一個(gè)引用必須在用完后釋放。

(b)SCNetworkReachabilityRef SCNetworkReachabilityCreateWithName (

CFAllocatorRef allocator,

const char *nodename

);

這個(gè)是根據(jù)傳入的網(wǎng)址測(cè)試連接,第二個(gè)參數(shù)比如為"www.apple.com",其他和上一個(gè)一樣。

(2)確定連接的狀態(tài):

Boolean SCNetworkReachabilityGetFlags (

SCNetworkReachabilityRef target,

SCNetworkReachabilityFlags *flags

);

這個(gè)函數(shù)用來獲得測(cè)試連接的狀態(tài),第一個(gè)參數(shù)為之前建立的測(cè)試連接的引用,第二個(gè)參數(shù)用來保存獲得的狀態(tài),如果能獲得狀態(tài)則返回TRUE,否則返回FALSE

(3)主要的數(shù)據(jù)類型介紹:

SCNetworkReachabilityRef:用來保存創(chuàng)建測(cè)試連接返回的引用

(4)主要常量介紹:

SCNetworkReachabilityFlags:保存返回的測(cè)試連接狀態(tài)

其中常用的狀態(tài)有:

kSCNetworkReachabilityFlagsReachable:能夠連接網(wǎng)絡(luò)

kSCNetworkReachabilityFlagsConnectionRequired:能夠連接網(wǎng)絡(luò),但是首先得建立連接過程

kSCNetworkReachabilityFlagsIsWWAN:判斷是否通過蜂窩網(wǎng)覆蓋的連接,比如EDGE,GPRS或者目前的3G.主要是區(qū)別通過WiFi的連接。

2.代碼例子

因此判斷是否已經(jīng)聯(lián)網(wǎng)的代碼例子可以如下所示:

+ (BOOL) connectedToNetwork

{

//創(chuàng)建零地址,0.0.0.0的地址表示查詢本機(jī)的網(wǎng)絡(luò)連接狀態(tài)

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;

//獲得連接的標(biāo)志

BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);

CFRelease(defaultRouteReachability);

//如果不能獲取連接標(biāo)志,則不能連接網(wǎng)絡(luò),直接返回

if (!didRetrieveFlags)

{

return NO;

}

//根據(jù)獲得的連接標(biāo)志進(jìn)行判斷

BOOL isReachable = flags & kSCNetworkFlagsReachable;

BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;

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

}


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 惠水县| 颍上县| 大姚县| 涞源县| 遵义市| 邢台县| 建湖县| 星子县| 商河县| 班戈县| 巢湖市| 府谷县| 门源| 杂多县| 白水县| 南部县| 嘉禾县| 福建省| 舒兰市| 绿春县| 香河县| 柘城县| 许昌市| 中西区| 枝江市| 清水河县| 隆德县| 突泉县| 河北区| 延庆县| 台安县| 葫芦岛市| 庆元县| 陆川县| 仁寿县| 新巴尔虎左旗| 南岸区| 中阳县| 柳江县| 襄汾县| 贵溪市|