1. 序章

このクイックチュートリアルでは、 java.net.ConnectExceptionの考えられる原因について説明します。 次に、2つの公開されているコマンドと小さなJavaの例を使用して、接続を確認する方法を示します。

2. java.net.ConnectExceptionの原因

java.net.ConnectException 例外は、ネットワーキングに関連する最も一般的なJava例外の1つです。 クライアントアプリケーションからサーバーへのTCP接続を確立しているときに発生する可能性があります。これはチェック済みの例外であるため、try-catchのコードで適切に処理する必要があります。 ] ブロック。

この例外には多くの原因が考えられます。

  • 接続しようとしているサーバーが起動していないため、接続を取得できません
  • サーバーへの接続に使用しているホストとポートの組み合わせが正しくない可能性があります
  • ファイアウォールは、特定のIPアドレスまたはポートからの接続をブロックする可能性があります

3. プログラムで例外をキャッチする

通常、java.net.Socketクラスを使用してプログラムでサーバーに接続します。 TCP接続を確立するには、正しいホストとポートの組み合わせに接続していることを確認する必要があります:

String host = "localhost";
int port = 5000;

try {
    Socket clientSocket = new Socket(host, port);

    // do something with the successfully opened socket

    clientSocket.close();
} catch (ConnectException e) {
    // host and port combination not valid
    e.printStackTrace();
} catch (Exception e) {
    e.printStackTrace();
}

ホストとポートの組み合わせが正しくない場合、Socketjava.net.ConnectException。をスローします。上記のコード例では、スタックトレースを出力して、何が問題になっているのかをより適切に判断します。 。 スタックトレースが表示されないということは、コードがサーバーに正常に接続されたことを意味します。

この場合、先に進む前に接続の詳細を確認する必要があります。 また、ファイアウォールが接続を妨げていないことを確認する必要があります。

4. CLIを使用した接続の確認

CLIを使用すると、 pingコマンドを使用して、接続しようとしているサーバーが実行されているかどうかを確認できます

たとえば、Baeldungサーバーが起動しているかどうかを確認できます。

ping baeldung.com

Baeldungサーバーが実行されている場合は、送受信されたパッケージに関する情報が表示されます。

PING baeldung.com (104.18.63.78): 56 data bytes
64 bytes from 104.18.63.78: icmp_seq=0 ttl=57 time=7.648 ms
64 bytes from 104.18.63.78: icmp_seq=1 ttl=57 time=14.493 ms

telnetは、指定されたホストまたはIPアドレスに接続するために使用できるもう1つの便利なCLIツールです。さらに、テストする正確なポートを渡すこともできます。 それ以外の場合は、デフォルトのポート23が使用されます。

たとえば、ポート80でBaeldung Webサイトに接続する場合は、次のコマンドを実行できます。

telnet baeldung.com 80

pingおよびtelnetコマンドは、到達しようとしているサーバーが実行されていて、正しいホストとポートの組み合わせを使用している場合でも、常に機能するとは限らないことに注意してください。 これは、通常、不正アクセスを防ぐために厳重に保護されている実稼働システムに当てはまります。 さらに、特定のインターネットトラフィックをブロックするファイアウォールが、障害のもう1つの原因である可能性があります。

5. 結論

このクイックチュートリアルでは、一般的なJavaネットワーク例外 java.net.ConnectExceptionについて説明しました。

その例外の考えられる原因の説明から始めました。 プログラムで例外をキャッチする方法と、原因の特定に役立つ可能性のある2つの便利なCLIコマンドを示しました。

いつものように、この記事に示されているコードは、GitHubから入手できます。