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?+user=&password= );. ConnectException이 발생합니다.
  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 블록을 사용하여 예외를 처리할 수 있습니다. 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
작가: 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