国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 石屏县| 桑植县| 稻城县| 达拉特旗| 当阳市| 安阳市| 克什克腾旗| 黑水县| 海原县| 景东| 泌阳县| 读书| 甘肃省| 禄丰县| 镇巴县| 扶沟县| 图片| 潮州市| 安义县| 平谷区| 固始县| 武胜县| 晋中市| 会昌县| 泌阳县| 嵊泗县| 樟树市| 朔州市| 德安县| 吉木乃县| 海城市| 桃园县| 金乡县| 永安市| 太原市| 安阳市| 富锦市| 呼玛县| 呼玛县| 敖汉旗| 油尖旺区|