Javaを使用してサービスを確認するにはどうすればよいですか?私はthis articleを見つけましたが、それはホスト名をチェックするためだけです。Javaからのサービスの可用性を確認してください
私の質問は、ポートx実行中のサービス(例:myhostname:8080
またはmyhostname:8099
)を確認するには、これらのポートでサービスnまたはpを実行している可能性があります。私はjavaで同じ効果を達成する?
Javaを使用してサービスを確認するにはどうすればよいですか?私はthis articleを見つけましたが、それはホスト名をチェックするためだけです。Javaからのサービスの可用性を確認してください
私の質問は、ポートx実行中のサービス(例:myhostname:8080
またはmyhostname:8099
)を確認するには、これらのポートでサービスnまたはpを実行している可能性があります。私はjavaで同じ効果を達成する?
スニペットはpingを送信します。pingは、あなたが望むものを達成するために操作できません。ただopen a socketと例外をキャッチします。
bool success = true;
try {
(new Socket(host, port)).close();
} catch (UnknownHostException e) {
// unknown host
success = false;
} catch (IOException e) {
// io exception, service probably not running
success = false;
}
あなたが実行しているサービスを検出する必要がある場合は、送信された最初のバイトを読んで、あなたは各サービスが送信する必要があります知っていることにそれらを比較する必要があります。これは、前後に数回通過する必要があります。
ソケットを使用してこれを行うことができます。
new Socket("localhost", 8080).getInputStream()
try catchブロックでそれを囲み、解決策があります。
プラス()。 – EJP
ソケットに接続しようとします。
InetAddress addr = InetAddress.getByName("myhostname");
Socket socket = new Socket(addr, 8099);
例外がスローされない場合、ホストはそのポートで接続を受け入れています。そうでない場合は、通常ConnectExceptionが表示されます。
サービスがウェブであるため、レスポンスコードの検証を追加することができます。
boolean available = false;
HttpURLConnection conn = null;
try {
conn = (HttpURLConnection) new URL("http://yourdomain/").openConnection();
conn.connect();
if(conn.getResponseCode() == 200)
available = true;
}
catch(IOException e) {
}
finally {
if(conn != null)
conn.disconnect();
}
サービスを使用して、例外が発生したときに処理してください。一般的に、リソースを使用する前に、リソースの可用性をテストする必要はありません。テストしたときにそれが利用可能であったのですが、それを使った時ではありませんでしたか?
ソケット変数はfinallyブロック内で閉じるためにtryブロックの外側にある必要があります。 – h3xStream
@ h3xStreamそれを指摘してくれてありがとう。 – marcog
とnullに設定されています:) – h3xStream