ip/machineへのpingを実行する必要があります。コードはあらゆる種類のプラットフォーム(Windows、Linux、Mac)で実行でき、損失とラウンドトリップ時間に関する情報を取得する必要があります。したがって、Javaのpingの実行は十分ではありません。これは、ping応答を文字列として解析する必要があるためです。これは、プラットフォームごとおよびOS言語ごとに異なります。だから私は何をする必要がありますか?JNIのようなものがあることは知っていますが、私はJavaを初めて使用するので、ここで少し助けが必要です。それでも、プラットフォームごとにネイティブ実装が必要であることを意味しますか?例や提案はありますか?
4 に答える
Javaはプラットフォームに依存しないため、使用しているOSを確認しSystem.getProperty("os.name")
、応答を解析するか、それに応じてコマンドを定義できます。
または、ICMP ECHO REQUESTに最も近い実装であると思われるを使用することもできますがisReachable(int timeout)
、InetAddress
損失とラウンドトリップ時間に関する情報は提供されません。
もう1つのアイデアは、pingの代わりにtracert /tracepathを使用して往復を取得することです。詳細については、このスレッドを確認してください。
純粋なJavaで実際のICMPを実行することはできません。適度に移植可能なjpcapライブラリは、ICMP(ping)を含むネイティブライブラリへの優れたJavaインターフェイスを提供します。
解析はまだあなたの最も簡単なオプションだと思います。この正規表現以上のものが必要な場合は、私は驚きます。
time[<=]([0-9.]+)[ ]?ms
括弧で囲まれているので、またはのような時間を取得1
できます。14
1.239
Float.parseFloat()
JNIを使用してpingコマンドを取得しました。ネイティブ(C)を使用してpingを実装し、それをJNIでラップしました。ダウングレードとは、プラットフォームごとにCdllをコンパイルする必要があることです。