現在、ネットワーク リクエストが 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-
れます。これは、インターネットが存在することを示しています (R
フラグが立てられているため) 。
何か不足していますか?どんな助けでも大歓迎です。
注: iOS シミュレーターを使用しています。しかし、それが問題になるとは思わないでください。