上面兩講我們講解了如何擷取網路狀態與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的串連。