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