簡體   English   中英

Mac和iOS上的互聯網連接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM