2011-01-10 16 views
2

Javaを使用してサービスを確認するにはどうすればよいですか?私はthis articleを見つけましたが、それはホスト名をチェックするためだけです。Javaからのサービスの可用性を確認してください

私の質問は、ポートx実行中のサービス(例:myhostname:8080またはmyhostname:8099)を確認するには、これらのポートでサービスnまたはpを実行している可能性があります。私はjavaで同じ効果を達成する?

答えて

5

スニペットは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; 
} 

あなたが実行しているサービスを検出する必要がある場合は、送信された最初のバイトを読んで、あなたは各サービスが送信する必要があります知っていることにそれらを比較する必要があります。これは、前後に数回通過する必要があります。

+0

ソケット変数はfinallyブロック内で閉じるためにtryブロックの外側にある必要があります。 – h3xStream

+0

@ h3xStreamそれを指摘してくれてありがとう。 – marcog

+0

とnullに設定されています:) – h3xStream

0

ソケットを使用してこれを行うことができます。

new Socket("localhost", 8080).getInputStream() 

try catchブロックでそれを囲み、解決策があります。

+0

プラス()。 – EJP

2

ソケットに接続しようとします。

InetAddress addr = InetAddress.getByName("myhostname"); 
Socket socket = new Socket(addr, 8099); 

例外がスローされない場合、ホストはそのポートで接続を受け入れています。そうでない場合は、通常ConnectExceptionが表示されます。

3

サービスがウェブであるため、レスポンスコードの検証を追加することができます。

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(); 
} 
1

サービスを使用して、例外が発生したときに処理してください。一般的に、リソースを使用する前に、リソースの可用性をテストする必要はありません。テストしたときにそれが利用可能であったのですが、それを使った時ではありませんでしたか?

関連する問題