Android 用の ping アプリケーションを開発する場合、外部サーバーに ping を実行しようとすると問題が発生することがよくあります。ローカル IP ping は機能する可能性がありますが、外部 IP アドレスへのアクセスには特定の課題が生じます。
この問題の潜在的な原因の 1 つは、外部サーバーのアクセス可能性に関連している可能性があります。これを確認するには、8.8.8.8 (Google DNS) や 1.1.1.1 (Cloudflare DNS) などのさまざまな外部サーバーに ping を送信するようにコードを変更することを検討してください。これは、問題がターゲットとしている特定の外部 IP にあるのか、それともコードにあるのかを判断するのに役立ちます。
外部サーバーのアクセス可能性を確認しても問題が解決しない場合は、コードの構文を詳しく調べてください。 InetAddress.isReachable() メソッドは、ping を送信する IP アドレスとタイムアウト値の 2 つのパラメータを取ります。 ping 操作が完了するまでに十分な時間を確保できる適切なタイムアウト値が設定されていることを確認してください。
さらに、アプリケーションのマニフェストで必要な権限が宣言されていることを確認してください。 android.permission.INTERNET 権限を明示的に宣言する必要があります。これにより、アプリケーションがネットワーク接続を確立できるようになります。
これらすべての側面を確認しても問題が解決しない場合は、別のアプローチを使用して外部 IP ping を実行することを検討してください。 。成功している方法の 1 つは、Runtime.exec() メソッドを介してシェル コマンドを実行することです。このアプローチを示すコード スニペットの例を次に示します。
private boolean executeCommand(){ System.out.println("executeCommand"); Runtime runtime = Runtime.getRuntime(); try { Process mIpAddrProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8"); int mExitValue = mIpAddrProcess.waitFor(); System.out.println(" mExitValue "+mExitValue); if(mExitValue==0){ return true; }else{ return false; } } catch (InterruptedException ignore) { ignore.printStackTrace(); System.out.println(" Exception:"+ignore); } catch (IOException e) { e.printStackTrace(); System.out.println(" Exception:"+e); } return false; }
このコード スニペットでは、Runtime.exec() メソッドを使用して /system/bin/ping コマンドを実行します。これにより、外部 IP アドレスに ping を実行できます。具体的には。 -c 1 オプションは、単一の ping 要求のみを送信することを指定します。このメソッドは、ping が成功した (true) か失敗した (false) かを示すブール値を返します。
以上がAndroid ping アプリが外部 IP への ping に失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。