Java.Net.ConnectException: 연결 시간 초과

Shuvayan Ghosh Dastidar 2023년10월12일
  1. Java에서 java.net으로 네트워크 호출하기
  2. Java의 java.net 패키지 오류
Java.Net.ConnectException: 연결 시간 초과

java.net 패키지에는 인터넷의 모든 서버와 연결하는 데 사용할 수 있는 많은 기능이 있으므로 GET 또는 POST와 같은 나머지 호출을 만드는 데 사용할 수 있습니다.

이 자습서에서는 이 패키지를 사용하여 기본 네트워크 호출을 수행하고 직면하고 해결할 수 있는 오류에 중점을 둘 것입니다.

Java에서 java.net으로 네트워크 호출하기

네트워크 호출을 만드는 것은 Java 개발자가 매일 직면하는 가장 중요한 일 중 하나입니다. 네트워크 호출을 올바르게 수행하면 애플리케이션이 더욱 강력해지고 우수한 사용자 경험을 제공할 수 있습니다.

java.net 패키지에는 네트워크 호출과 관련된 많은 기능이 있습니다.

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;

class Main {
  public static void main(String args[]) throws Exception {
    HttpURLConnection.setFollowRedirects(true); // Defaults to true

    String url = "https://www.delftstack.com/howto/java/";
    URL request_url = new URL(url);
    HttpURLConnection http_conn = (HttpURLConnection) request_url.openConnection();
    http_conn.setConnectTimeout(100000);
    http_conn.setReadTimeout(100000);
    http_conn.setInstanceFollowRedirects(true);
    System.out.println(String.valueOf(http_conn.getResponseCode()));
  }
}

위의 코드 세그먼트는 url 변수에 GET 요청을 한 다음 연결을 엽니다. 모든 것이 작동하면 응답 코드 200을 출력합니다.

그러나 너무 많이 시도하면 서버 연결에 실패하고 IOException이 발생할 수 있습니다.

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;

class Main {
  public static void main(String args[]) throws Exception {
    URL url = new URL("https://reqres.in/api/users");
    HttpURLConnection http = (HttpURLConnection) url.openConnection();
    http.setRequestMethod("POST");
    http.setDoOutput(true);
    http.setRequestProperty("Content-Type", "application/json");
    http.setRequestProperty("Content-Length", "0");
    String body = "{\"name\": \"morpheus\",\"job\": \"leader\"}";
    http.getOutputStream().write(body.getBytes("UTF8"));
    System.out.println(http.getResponseCode() + " " + http.getResponseMessage());
    http.disconnect();
  }
}

위의 코드 세그먼트는 샘플 REST API 서버에 POST 요청을 만들고 응답을 반환합니다.

Java의 java.net 패키지 오류

Java에서 네트워크 호출을 수행하는 동안 연결 시간 초과 문제가 발생할 수 있습니다. 이러한 문제를 해결하는 것은 때때로 특정 URL이 브라우저에서 열리지 않는 이유와 비슷합니다.

다음과 같은 원인일 수 있습니다.

  1. URL의 IP/도메인이 올바르지 않습니다.
  2. IP/도메인에 해당하는 서버가 다운되었습니다.
  3. 방화벽이 요청을 차단했거나 인터넷이 프록시 뒤에 있습니다.
  4. 서버가 IP를 차단 목록에 포함했을 수 있습니다.

예를 들어:

import java.io.*;
import java.net.URL;
import java.net.URLConnection;

class Main {
  public static void main(String args[]) throws Exception {
    URLConnection urlConnection = null;
    OutputStream outputStream = null;
    URL url = new URL("http://google.com");
    urlConnection = url.openConnection();
    urlConnection.setConnectTimeout(1);
  }
}

출력:

Exception in thread "main" java.net.SocketTimeoutException: Connect timed out
	at java.base/java.net.Socket.connect(Socket.java:648)
	at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:177)
	at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:474)
	at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:569)
	at java.base/sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
...

따라서 위의 예외는 소켓 또는 URL에 대한 적절한 연결을 열 수 없고 포트 조합 또는 시간 초과가 URL에 연결하기에 충분하지 않은 경우 발생합니다. 이 경우 urlConnection.setConnectTimeout(1);.

Java에서 Connection Timed Out 오류를 피하기 위해 다음을 시도할 수 있습니다.

  1. setFixedLengthStreamingMode()를 통해 콘텐츠 길이를 설정합니다.
  2. 첫 번째 시도에서 URL 연결이 실패한 경우 연결을 재시도합니다.
  3. setConnectTimeout 기능을 사용하여 연결 제한을 더 높은 값으로 늘립니다.
Shuvayan Ghosh Dastidar avatar Shuvayan Ghosh Dastidar avatar

Shuvayan is a professional software developer with an avid interest in all kinds of technology and programming languages. He loves all kinds of problem solving and writing about his experiences.

LinkedIn Website

관련 문장 - Java Exception