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

Muhammad Zeeshan 2023년10월12일
  1. Java의 소켓
  2. Java의 시간 초과
  3. Java에서 java.net.SocketTimeoutException: Connection timed out의 원인
  4. Java에서 java.net.SocketTimeoutException: Connection timed out에 대한 솔루션
Java.Net.SocketTimeoutException: 연결 시간 초과

오늘 기사에서는 java.net.SocketTimeoutException: Connection timed out에 대해 설명합니다. 하지만 먼저 소켓과 타임아웃의 개념을 자세히 살펴보겠습니다.

Java의 소켓

두 컴퓨터 응용 프로그램 간의 논리 링크에는 여러 끝점이 있을 수 있으며 그 중 하나는 소켓입니다.

달리 말하면 응용 프로그램이 네트워크를 통해 데이터를 송수신하는 데 사용하는 논리적 인터페이스입니다. IP 주소와 포트 번호는 가장 기본적인 형태의 소켓을 구성합니다.

각 소켓에는 고유한 포트 번호가 할당되어 서비스를 식별하는 데 사용됩니다. 연결 기반 서비스는 TCP를 기반으로 하는 스트림 소켓을 사용합니다.

이 때문에 Java는 클라이언트 측 프로그래밍 옵션으로 java.net.Socket 클래스를 제공합니다.

한편, java.net.ServerSocket 클래스는 서버측 TCP/IP 프로그래밍에 사용됩니다. UDP를 기반으로 하는 데이터그램 소켓은 또 다른 종류의 소켓이며 연결 없는 서비스에 사용되는 소켓입니다.

Java는 UDP 작업을 위해 java.net.DatagramSocket을 지원합니다.

Java의 시간 초과

socket 객체의 인스턴스는 socket 생성자가 호출될 때 생성되어 클라이언트 측에서 클라이언트와 서버 간의 연결을 허용합니다.

입력으로 생성자는 원격 호스트의 주소와 포트 번호를 받을 것으로 예상합니다. 그런 다음 제공된 매개변수를 사용하여 원격 호스트에 대한 연결을 설정하려고 시도합니다.

이 작업은 성공적인 연결이 생성될 때까지 다른 프로세스가 진행되지 않도록 합니다. 그러나 지정된 시간 이후에 연결에 실패하면 응용 프로그램에서 다음 오류가 발생합니다.

java.net.SocketTimeoutException : Connection timed out

들어오는 연결 요청을 수신하면 서버 측의 ServerSocket 클래스가 영구적으로 활성화됩니다. ServerSocket에서 연결 요청을 수신하면 accept 기능이 호출되어 새 socket 개체를 생성합니다.

이전 방법과 유사하게 이 방법은 원격 클라이언트가 연결될 때까지 차단됩니다.

Java에서 java.net.SocketTimeoutException: Connection timed out의 원인

다음은 오류가 발생할 수 있는 몇 가지 이유입니다.

  1. 서버가 정상적으로 작동합니다. 그러나 timeout 값은 더 짧은 시간으로 설정됩니다. 따라서 timeout 값을 늘리십시오.
  2. 원격 호스트에서 어떤 서비스도 지정된 포트를 수신하지 않습니다.
  3. 전송 중인 원격 호스트에 대한 경로가 없습니다.
  4. 원격 호스트가 연결을 허용하지 않는 것 같습니다.
  5. 원격 호스트에 도달하는 데 문제가 있습니다.
  6. 인터넷 연결이 느리거나 사용할 수 없습니다.

Java에서 java.net.SocketTimeoutException: Connection timed out에 대한 솔루션

클라이언트 및 서버 활동에 대한 timeout 옵션을 미리 설정할 수 있습니다. trycatch 구문을 추가하면 적절한 솔루션이 됩니다.

  1. 클라이언트 측에서 가장 먼저 할 일은 null 소켓을 구성하는 것입니다. 그런 다음 connect() 메서드를 사용한 다음 시간 제한이 0밀리초보다 커야 하는 timeout 매개 변수를 구성합니다.

    함수가 반환되기 전에 제한 시간이 만료되면 SocketTimeoutException이 발생합니다.

    Socket s = new Socket();
    SocketAddress sAdres = new InetSocketAddress(host, port);
    s.connect(sAdres, 50000);
    
  2. 서버 측에서 timeout 값을 설정하려면 setSoTimeout() 기능을 사용할 수 있습니다. timeout 매개변수의 값은 ServerSocket.accept() 함수가 차단할 시간을 결정합니다.

    ServerSocket servers = new new ServerSocket(port);
    servers.setSoTimeout(10000);
    

    마찬가지로 timeout은 0밀리초보다 커야 합니다. 메서드가 반환되기 전에 timeout이 만료되면 메서드는 SocketTimeoutException을 생성합니다.

  3. 연결 시간 초과를 결정한 다음 try-catch 블록을 사용하여 나중에 처리하는 것은 HttpException을 처리하는 또 다른 훌륭한 기술입니다.

    HttpUrlConnection conn = (HttpURLConnection) url.openConnection();
    conn.setConnectTimeout(8000);
    
Muhammad Zeeshan avatar Muhammad Zeeshan avatar

I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.

LinkedIn

관련 문장 - Java Error