2

App Developer Library のReachabilityを使用してインターネット接続を確認します。コードは次のとおりです。

+(BOOL)reachable {
Reachability *r = [Reachability reachabilityForInternetConnection];
NetworkStatus internetStatus = [r currentReachabilityStatus];

Reachability *r1 = [Reachability reachabilityForLocalWiFi];
NetworkStatus internetStatus1 = [r1 currentReachabilityStatus];

Reachability *r2 = [Reachability reachabilityWithHostName:FTPURL];
NetworkStatus internetStatus2 = [r2 currentReachabilityStatus];

DLog(@"%d,%d,%d",internetStatus,internetStatus1,internetStatus2);

if(internetStatus != NotReachable && internetStatus1 != NotReachable && internetStatus2 != NotReachable) 
{
    return YES;
}

return NO;

}

Wi-Fi が利用可能な場合、3 つのステータスは必ず「到達可能」になります。Wi-Fi を手動でオフにすると (ネットワーク接続フラグがオフ)、3 つのステータスはすべて「NOTReachable」になります。

モデムの電源を切り、ワイヤレス ルーターを開いたままにすると (ネットワーク接続フラグがオン)。インターネットにアクセスできませんが、3 つのステータスはすべて「到達可能」のままです。これが発生する理由と、この UnReachable ステータスを検出する方法を知りたいですか?

4

1 に答える 1

2

iPhoneが非常に小さなネットワーク(つまり、無線LAN)とインターネットに関係している限り、区別はありません。確かに言えることは、TCP/IPネットワークに接続しているということだけです。そのネットワークの大きさを知る方法はありません。

サーバーが特定のiPhoneから到達可能かどうかを確認したい場合は、サーバーへの接続を試みる必要があります。それでも、接続をテストしてから実際のデータを送信するまでの間に消えてしまう可能性があります。したがって、開始する前に接続をテストするかどうかに関係なく、データ送信中の接続の喪失を適切に処理する必要があります。事前にチェックする必要はなく、そこにあると想定して、送信エラーを処理するための優れたコードを持っている方がよいでしょう。

于 2012-07-05T14:57:35.387 に答える