1. 소개

이 빠른 사용방법(예제)에서는 java.net.ConnectException의 가능한 원인에 대해 설명합니다 . 그런 다음 공개적으로 사용 가능한 두 개의 명령과 작은 Java 예제를 사용하여 연결을 확인하는 방법을 보여줍니다.

2. java.net.ConnectException의 원인

java.net.ConnectException의 예외는 네트워킹과 관련된 가장 일반적인 자바 예외 중 하나입니다. 클라이언트 애플리케이션에서 서버로 TCP 연결을 설정할 때 발생할 수 있습니다. 확인 된 예외이므로 try-catch 블록 의 코드에서 제대로 처리해야합니다 .

이 예외의 가능한 원인은 여러 가지입니다.

  • 연결하려는 서버가 시작되지 않았기 때문에 연결할 수 없습니다.
  • 서버에 연결하는 데 사용하는 호스트 및 포트 조합이 올바르지 않을 수 있습니다.
  • 방화벽은 특정 IP 주소 나 포트의 연결을 차단할 수 있습니다

3. 프로그래밍 방식으로 예외 잡기

일반적으로 java.net.Socket 클래스를 사용하여 프로그래밍 방식으로 서버에 연결합니다  . TCP 연결을 설정하려면 올바른 호스트 및 포트 조합에 연결하고 있는지 확인 해야합니다 .

String host = "localhost";
int port = 5000;

try {
    Socket clientSocket = new Socket(host, port);

    // do something with the successfully opened socket

    clientSocket.close();
} catch (ConnectException e) {
    // host and port combination not valid
    e.printStackTrace();
} catch (Exception e) {
    e.printStackTrace();
}

호스트 및 포트 조합이 잘못된 경우 Socketjava.net.ConnectException을 발생시킵니다. 위의 코드 예제에서는 무엇이 잘못되었는지 더 잘 파악하기 위해 스택 추적을 인쇄합니다. 스택 추적이 보이지 않음은 코드가 서버에 성공적으로 연결되었음을 의미합니다.

이 경우 진행하기 전에 연결 세부 정보를 확인해야합니다. 방화벽이 연결을 차단하지 않는Map 확인해야합니다.

4. CLI로 연결 확인

CLI를 통해 ping 명령을 사용하여 연결하려는 서버가 실행 중인지 확인할 수  있습니다.

예를 들어 Baeldung 서버가 시작되었는지 확인할 수 있습니다.

ping baeldung.com

Baeldung 서버가 실행 중이면 보내고받은 패키지에 대한 정보를 볼 수 있습니다.

PING baeldung.com (104.18.63.78): 56 data bytes
64 bytes from 104.18.63.78: icmp_seq=0 ttl=57 time=7.648 ms
64 bytes from 104.18.63.78: icmp_seq=1 ttl=57 time=14.493 ms

텔넷 은 지정된 호스트 또는 IP 주소에 연결하는 데 사용할 수있는 또 다른 유용한 CLI 도구입니다. 또한 테스트하려는 정확한 포트를 전달할 수도 있습니다. 그렇지 않으면 기본 포트 23이 사용됩니다.

예를 들어 포트 80에서 Baeldung 웹 사이트에 연결하려면 다음을 실행할 수 있습니다.

telnet baeldung.com 80

연결 하려는 서버가 실행 중이고 올바른 호스트 및 포트 조합을 사용하고있는 경우에도 pingtelnet 명령이 항상 작동하지 않을 수 있습니다. 일반적으로 무단 액세스를 방지하기 위해 Security이 강화 된 프로덕션 시스템의 경우가 많습니다. 또한 특정 인터넷 트래픽을 차단하는 방화벽이 또 다른 실패 원인 일 수 있습니다.

5. 결론

이 빠른 사용방법(예제)에서는 일반적인 Java 네트워크 예외 인 java.net.ConnectException에 대해 설명했습니다 .

그 예외의 가능한 원인에 대한 설명부터 시작했습니다. 원인을 파악하는 데 도움이 될 수있는 두 가지 유용한 CLI 명령과 함께 프로그래밍 방식으로 예외를 포착하는 방법을 보여주었습니다.

항상 그렇듯이이 기사에 표시된 코드는 GitHub에서 사용할 수 있습니다 .