[java] 자바 네트워크 프로그래밍에서의 소켓 타임아웃 설정하기

자바 네트워크 프로그래밍에서는 소켓을 사용하여 서버와 클라이언트 간에 통신을 할 수 있습니다. 소켓 연결 시 소켓 타임아웃을 설정하는 방법에 대해 알아봅시다.

소켓 타임아웃이란?

소켓 타임아웃은 소켓 연결이 성립되기까지 대기하는 시간을 의미합니다. 일정 시간 동안 서버로부터 응답이 없을 경우 연결을 종료하고 예외를 발생시킵니다.

소켓 타임아웃 설정 방법

자바에서는 Socket.setSoTimeout(int timeout) 메서드를 사용하여 소켓 타임아웃을 설정할 수 있습니다. 아래는 예시 코드입니다.

Socket socket = new Socket();
int timeout = 5000; // 5초
socket.setSoTimeout(timeout);

위의 코드에서 setSoTimeout 메서드를 사용하여 소켓의 타임아웃을 5초로 설정했습니다.

사용 예시

아래는 소켓 타임아웃을 설정한 후에 서버로부터 응답을 받는 예시 코드입니다.

try {
    // 서버와의 소켓 연결
    Socket socket = new Socket("localhost", 8080);
    
    // 소켓 타임아웃 설정
    int timeout = 5000; // 5초
    socket.setSoTimeout(timeout);
    
    // 서버로부터 데이터 읽기
    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    String response = in.readLine();
    
    // 응답 출력
    System.out.println("서버 응답: " + response);
    
    // 소켓 닫기
    socket.close();
} catch (SocketTimeoutException e) {
    // 타임아웃 예외 발생 시 처리 로직
    System.out.println("서버 응답을 기다리는 동안 타임아웃이 발생했습니다.");
} catch (IOException e) {
    // 기타 예외 발생 시 처리 로직
    e.printStackTrace();
}

위 코드에서 setSoTimeout 메서드를 사용하여 소켓 타임아웃을 설정하고, SocketTimeoutException을 통해 타임아웃 예외를 처리하고 있습니다.

결론

자바 네트워크 프로그래밍에서는 setSoTimeout 메서드를 사용하여 소켓 타임아웃을 설정할 수 있습니다. 소켓 타임아웃을 효과적으로 활용하여 네트워크 통신 시 발생할 수 있는 지연 상황에 대비할 수 있습니다.

참고 문헌: