[解決済み] IPアドレスにpingを打つことができるのに、なぜInetAddress.isReachableはfalseを返すのでしょうか?
質問
InetAddress byName = InetAddress.getByName("173.39.161.140");
System.out.println(byName);
System.out.println(byName.isReachable(1000));
なぜ
isReachable
を返すのでしょうか?
false
? IPにpingを打つことができます。
どのように解決するのですか?
この "isReachable"です。 メソッドは、多くの場合、私にとって使用するに値しないものでした。あなたがオンラインであり、外部ホスト(例えばgoogle.com)を解決することができるかどうかを単純にテストするための私の代替案を見るために、一番下までスクロールすることができます...。これは一般的に *NIX マシン上で動作するようです。
問題点
この件に関しては、多くの雑談があります。
-
以下は他の似たような質問です。
-
そして、この同じ件に関するバグ報告まで.
第1部:再現性のある問題例
この場合、失敗することに注意してください。
//also, this fails for an invalid address, like "www.sjdosgoogle.com1234sd"
InetAddress[] addresses = InetAddress.getAllByName("www.google.com");
for (InetAddress address : addresses) {
if (address.isReachable(10000))
{
System.out.println("Connected "+ address);
}
else
{
System.out.println("Failed "+address);
}
}
//output:*Failed www.google.com/74.125.227.114*
その2.ハック的回避策
別の方法として、次のようにすることができます。
// in case of Linux change the 'n' to 'c'
Process p1 = java.lang.Runtime.getRuntime().exec("ping -n 1 www.google.com");
int returnVal = p1.waitFor();
boolean reachable = (returnVal==0);
の-cオプションは ping は、ping が単に一度だけサーバに到達することを試みるようにします (ターミナルで使用する無限 ping とは対照的です)。
これは ホストが到達可能な場合は0 . それ以外の場合は "2" が返されます。
ずっとシンプルですが、もちろんプラットフォームによって異なります。 また、このコマンドを使用するには、特定の権限に関する注意事項があるかもしれませんが、私のマシンでは動作することが分かっています。
以下のことに注意してください。 1) このソリューションは製品品質ではありません。 ちょっとしたハックです。 google がダウンしていたり、インターネットが一時的に遅かったり、あるいは権限やシステム設定におかしなところがあると、偽の否定を返すことがあります (つまり、入力アドレスが到達可能であるにもかかわらず失敗することがあります)。 2) isReachableの失敗は、未解決の問題です。 再び - JVMがホストに到達しようとする方法のため、この執筆の時点でこれを行う完璧な方法はないことを示すいくつかのオンラインリソースがあります - 私は、それが本質的にプラットフォーム特有のタスクであり、単純ではあるものの、JVMによってまだ十分に抽象化されていないのだと思います。
関連
-
[解決済み] JVM起動時のパラメータ「-Xms」「-Xmx」とは何ですか?
-
java.sql.SQLException: 結果セットの開始前
-
代入の左辺は変数でなければならない 解答
-
1分でわかる!恋人の写真をIDEAの背景画像に設定する方法【おすすめ集
-
[解決済み] Javaはパラメータのデフォルト値をサポートしていますか?
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
-
[解決済み] 整数の左側にゼロを埋め込むにはどうしたらいいですか?
-
[解決済み] Javaで現在のスタックトレースを取得するにはどうすればよいですか?
-
[解決済み] Math.round(0.4999999999994) はなぜ1を返すのですか?
-
[解決済み】sumの順番を変えると違う結果になるのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン