2

アップルの到達可能性サンプルと「iPhone開発者の料理本」の別のサンプルを見てきました

IP/ポートの到達可能性をテストする手順は次のとおりです

  1. 指定されたIP/ポートを使用してsockaddr_in変数を作成します。
  2. アドレスを使用してSCNetworkReachabilityCreateWithAddressを呼び出します
  3. SCNetworkReachabilityGetFlagsを呼び出して、kSCNetworkFlagsReachableが設定されているかどうかを確認します。

テストに使用した有効な(有効範囲の)IP /ポートが何であれ、pingまたはtelnetテストでは実際には到達できない場合でも、コードは到達可能であると言っています。
(特定のIPへの到達可能性テストが常に成功する他のSO投稿を見たことがあります) 到達可能性reachabilityWithAddressが機能しません

SCNetworkReachability ..呼び出しは、引数(IPアドレスまたはホスト名)の有効性のみをチェックしますか?つまり、到達可能性をテストするために、実際に指定されたアドレスにパケットを送信しますか(または接続しますか)?

自分でタイムアウト付きの非同期接続を実装することはできますが、タイムアウトがアップルのレビュー担当者によって拒否されないようにする時間は微妙です(時間がかかりすぎると、アップルのレビュー担当者は私のアプリがネットワークの到達可能性を処理していないと思うかもしれませんすべて)

ありがとうございました

4

1 に答える 1

3

SCNetworkReachabilityリファレンスによると、上記のコメントに基づいて質問に答える

アプリケーションによってネットワークスタックに送信されたデータパケットがローカルデバイスを離れることができる場合、リモートホストは到達可能であると見なされます。到達可能性は、データパケットが実際にホストによって受信されることを保証するものではありません。

これはサーバーのステータスをチェックすることはできませんが、データパケットを取得できることを確認するだけです。

Appleは、ネットワーク関連の問題がある場合にアプリがエレガントに失敗することを望んでいます。到達可能性を使用してインターネットが利用可能かどうかを確認することが最初のステップです。Reachabilityが失敗した場合は、サーバーを使用できないと想定して、すぐにユーザーに警告することができます。次の手順は、400の不正なリクエスト、404ファイルが見つからない、適切なタイムアウトを設定する、長時間のダウンロード中にUIをブロックしないなど、サーバーから返されたエラーを適切に処理し、何らかのステータスインジケーターを表示することです。

于 2011-05-06T13:11:05.350 に答える