4

3G では正常に機能するが、一部の企業ファイアウォールでは機能しないメッセージング プロトコルを使用したいと考えています。WiFi ネットワークに到達できる場合でも、WiFi 経由での接続に失敗した場合、アプリでセルラー ネットワークの使用を強制するにはどうすればよいですか?

編集: Reachability クラスの実装を読んだ後、2 つが実際に相互に排他的であるかどうかはわかりません。を介して両方のインターフェイスを検出することは十分に可能gethostbyname()です。

4

3 に答える 3

6

getifaddrs を使用して、ネットワーク インターフェイスを列挙します。「pdp」で始まる ifa_name を探します。これはセルラー インターフェイスになります (例: pdp_ip0)。テスト (ifa_flags & IFF_UP) してインターフェースが稼働していることを確認し、ifa_addr から IP アドレスを取得します。次に bind() を使用してソケットをそのアドレスにバインドします。

まだ起動していない場合、セルラー インターフェイスをアクティブにする方法がわからない。通常、高レベルの http 呼び出しを行って iOS にネットワークを起動させるだけですが、Wi-Fi も利用できる場合にセルラー サービスがアクティブになる条件はわかりません。通常、wifiへのフォールバックとして存在すると思われます。

于 2015-01-06T23:15:48.710 に答える
2

http://iphonedevsdk.com/discussion/comment/120957

そのスレッドの見た目からすると、それは不可能のようです。最善の策は、プロトコルを使用してみて、それが機能しない場合は「wifiから切断して再試行してください」などと言うことです。

このスレッドはほぼ同じことを言っています:

プログラムでiPhoneで3g接続を開始する方法は?

アップルが作成したReachabilityクラスを使用して、ネットワーク接続が現在3GまたはWiFiを介しているかどうかをテストしたり、特定のリソースがネットワークで利用可能かどうかを確認したりすることもできます。

于 2012-10-17T01:24:14.227 に答える