Java での java.net.ConnectException エラー

Sheeraz Gul 2023年10月12日
Java での java.net.ConnectException エラー

このチュートリアルでは、Java の java.net.ConnectException エラーについて説明します。

Java での java.net.ConnectException エラー

java.net.ConnectException は、ネットワークを使用しているときに最も一般的な例外です。 ほとんどの場合、クライアント、アプリケーション、およびサーバー間で TCP 接続を確立するときに発生します。

これは、try-catch ブロックを使用してコードで処理できるチェック済みアプリケーションです。 この例外は、IO 例外のサブクラスです。

この例外の階層は次のとおりです。

     java.lang.Object
        java.lang.Throwable
            java.lang.Exception
                java.io.IOException
                    java.net.SocketException
                        java.net.ConnectException

この例外の考えられる理由は次のとおりです。

  1. クライアントとサーバーが同じネットワークにない場合、両方ともインターネットやLANなどのネットワークにある必要があります。 それ以外の場合は、ConnectException がスローされます。
  2. サーバーが稼働していないとき。 通常、3306 (MySQL)、8080 (Tomcat 用)、27017 (MongoDB)、3000 または 4200 (React/Angular 用) などのポートは完全にダウンしているか、他のエンティティによって占有されており、ConnectException をスローします。
  3. ファイアウォールの場合など、セキュリティが通信を禁止している場合。 この場合、ConnectException がスローされます。
  4. 設定が上書きされると、サーバーは実行されている可能性がありますが、ポートにリストされている場合、ConnectException がスローされます。
  5. 接続文字列が正しくない場合、例えば Connection DemoConnection = DriverManager.getConnection("jdbc:mysql://localhost/:3306<databasename>?" + "user=<username>&password=<password>"); がスローされます。
  6. 誤って間違ったポート番号を指定した場合、ConnectException をスローします。

ConnectException の例を試してみましょう:

package delftstack;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.*;
import java.util.*;

public class Example {
  public static void main(String[] args) throws IOException {
    String Host_Name = "127.0.0.1";
    int Port_Number = 808;

    Socket New_Socket = new Socket(Host_Name, Port_Number);

    InputStream Input_Stream = New_Socket.getInputStream();
    InputStreamReader Input_Stream_Reader = new InputStreamReader(Input_Stream);
    int Demo_Data;

    StringBuilder Output_String = new StringBuilder();
    while ((Demo_Data = Input_Stream_Reader.read()) != -1) {
      Output_String.append((char) Demo_Data);
    }
  }
}

上記のコードは、ポートと IP が無効であるため、ConnectException をスローします。 出力を参照してください:

Exception in thread "main" java.net.ConnectException: Connection refused: connect
    at java.base/sun.nio.ch.Net.connect0(Native Method)
    at java.base/sun.nio.ch.Net.connect(Net.java:579)
    at java.base/sun.nio.ch.Net.connect(Net.java:568)
    at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588)
    at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327)
    at java.base/java.net.Socket.connect(Socket.java:633)
    at java.base/java.net.Socket.connect(Socket.java:583)
    at java.base/java.net.Socket.<init>(Socket.java:507)
    at java.base/java.net.Socket.<init>(Socket.java:287)
    at delftstack.Example.main(Example.java:16)

これで、try-catch ブロックを使用して例外を処理できます。 チェック例外であるため、メソッドに throws を追加する必要があります。

解決策を見てみましょう:

package delftstack;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.*;
import java.util.*;

public class Example {
  public static void main(String[] args) throws IOException {
    String Host_Name = "127.0.0.1";
    int Port_Number = 808;

    try (Socket New_Socket = new Socket(Host_Name, Port_Number)) {
      InputStream Input_Stream = New_Socket.getInputStream();
      InputStreamReader Input_Stream_Reader = new InputStreamReader(Input_Stream);
      int Demo_Data;

      StringBuilder Output_String = new StringBuilder();
      while ((Demo_Data = Input_Stream_Reader.read()) != -1) {
        Output_String.append((char) Demo_Data);
      }
    }

    catch (ConnectException ex) {
      System.out.println(
          "The Connect Exception  occured becuase the given hostname and port are invalid : "
          + ex.getMessage());
    }
  }
}

例外が処理されるようになったため、コードがクラッシュすることはありません。 出力を参照してください:

The Connect Exception  occured becuase the given hostname and port are invalid : Connection refused: connect
著者: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

関連記事 - Java Error