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
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