[英]Internet connection on Mac and iOS
我目前正在編寫一些代碼,以確定在Mac或iOS上是否可以發出網絡請求。
在被告知查看Apple提供的Reachability類之前,我只想指出,即使使用它們,我也能得到相同的結果。 因此,相反,我認為我會寫我自己的書,因為這完全是我所需要的。
我已經像Apple一樣發起了一個可達性對象:
+ (Reachability*) reachabilityForInternetConnection;
{
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;
return [self reachabilityWithAddress: &zeroAddress];
}
然后調用[networkStatusForFlags:flags]
(或其代碼中的等效項),我得到以下信息:
NSLog(@"Reachability Flag Status: %c%c %c%c%c%c%c%c%c\n",
(flags & kSCNetworkReachabilityFlagsIsWWAN) ? 'W' : '-',
(flags & kSCNetworkReachabilityFlagsReachable) ? 'R' : '-',
(flags & kSCNetworkReachabilityFlagsTransientConnection) ? 't' : '-',
(flags & kSCNetworkReachabilityFlagsConnectionRequired) ? 'c' : '-',
(flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) ? 'C' : '-',
(flags & kSCNetworkReachabilityFlagsInterventionRequired) ? 'i' : '-',
(flags & kSCNetworkReachabilityFlagsConnectionOnDemand) ? 'D' : '-',
(flags & kSCNetworkReachabilityFlagsIsLocalAddress) ? 'l' : '-',
(flags & kSCNetworkReachabilityFlagsIsDirect) ? 'd' : '-'
);
BOOL thereIsInternetAccess = NO;
if ((flags & kSCNetworkReachabilityFlagsReachable) != 0 && (flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0)
{
thereIsInternetAccess = YES;
}
else
{
thereIsInternetAccess = NO;
}
不管我的Mac的Wifi是打開還是關閉,我都會將以下內容輸出到控制台: Reachability Flag Status: -R -----l-
對我來說,它指示存在Internet(由於標記了R
)
我想念什么嗎? 任何幫助將不勝感激。
注意:我正在使用iOS Simulator。 不要以為那應該重要。
iOS模擬器無法正常運行。
使用系統配置框架進行網絡可達性時,會使用注冊的回調( SCNetworkReachabilitySetCallback
)通知Mac的網絡狀態已更新。 但是,從我的測試看來,這些標志並不是每次都正確地返回。 在具有Mac應用程序目標的Mac上或iOS設備上使用相同的代碼,代碼將以預期的結果運行。
模擬器永遠不應成為您應用程序唯一測試手段的另一個原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.