0

私は時々 AFNetworking と Reachability を使用しましたが、それは常にインターネット接続を確認するためのものでした。iOS デバイスがインターネットに接続されていない WLAN に接続されているかどうかを確認するにはどうすればよいですか?

到達可能性状況をリアルタイムで知ることができなければなりません。

*明確にするだけです:

インターネットが到達可能かどうかを確認したくありません。デバイスが WLAN に接続されているかどうかを確認したい。

*明確にするためにLANをWLANに変更

4

3 に答える 3

1

誰もが使用する標準Reachabilityクラスは非常に欺瞞的です。推測のみによって、ホストに到達可能かどうかを判断しようとします。たとえば、現在 www.google.com にアクセスできるかどうかを知りたい場合[Reachability reachabilityWithHostname:@"www.google.com"];、アプリを呼び出すと、サーバーがオンになっているか、接続されているか、応答しているかを確認するために実際にサーバーに「アクセス」することはありません。

到達可能性が実際に行うことは、大まかに次のようになります。

  1. 現在の DNS 構成を使用して IP アドレスを検索します。DNS を解決できない場合、ホストに到達できません。
  2. すべての既知のネットワーク接続の現在の状態を調べます。それらがすべてダウンしている場合、ホストは到達不能です。
  3. ネットワーク アダプタごとに、宛先 IP がローカル サブネット上にあるかどうかを確認します。到達可能である場合は、到達可能であると報告します。
  4. ネットワーク アダプタごとに、宛先 IP へのルーティング パスが存在するかどうかを確認します。通常、これはデフォルト ゲートウェイのみを調べます。宛先 IP へのパスがある場合は、到達可能として報告します。
  5. すべてが失敗した場合、ホストに到達できません。

発生している問題は、Wi-Fi を使用しているが、スターバックスでは一般的であるように、ユーザーがまだ利用規約に同意していない場合、目的地が到達可能であると報告されることです。

ネットワーク接続をテストする唯一の実際の方法は、何かをダウンロードすることです。たとえば、サーバー上で Ping/Pong 機能やハートビート ファイルがこの目的のみに使用されているのをよく見かけます。この邸宅では、インターネットだけでなく、サーバーが期待どおりに機能しているかどうかをテストできます。

于 2013-10-19T20:51:43.223 に答える
-1

iPhone OS のネットワーク アプリのパート 1パート 2をご覧ください。

Reachability を使用して接続をプリフライトしないで、リクエストを発行するだけにしてください。

リクエストを発行する前に到達可能性を使用して接続をテストすることを主張する場合は、Jonah によって説明されている方法を使用し、内部でのみ到達可能なホスト名でテストしてください。

例えば:

    // ... 
    if (wifiReachable) {
        returnValue = [Reachability reachabilityWithHostname:@"internalserver.example.com"];
    }
    return returnValue;
}
于 2013-10-17T20:25:59.127 に答える