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? +user=&password= );.ConnectException이 발생합니다. - 실수로 잘못된 포트 번호를 입력하면
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 블록을 사용하여 예외를 처리할 수 있습니다. Checked 예외이므로 메서드에 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