[ JAVA ] Socket 의 timeout 설정
JAVA 에서 Socket 으로 연결 할 때 서버 측에서 read 를 하다가
client 에서 요청이 얼마간 안오면 time out 이 발생 하도록 설정을 하고 싶은데
이걸 직접 Thread 를 사용하여 구현하자니 상당히 귀찮아 지는데
JAVA 에서는 이미 친절하게도 기본 API를 통해 이를 가능하도록
해 놓았다.
다름이 아니라 Socket 클래스의 setSoTimeout 메소드를 통해서 인데
아래와 같은 예제를 보면 확인 해 볼 수 있다.
//***************
//서버 로직
//***************
package test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;public class SocketServerTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ServerSocket ssocket = null;
Socket socket = null;
try{
ssocket = new ServerSocket(2000);
System.out.println("Start=========");
socket = ssocket.accept();
System.out.println("connected!!!!!!");
socket.setSoTimeout(2000);
//타임 아웃 설정
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
reader.readLine();
}catch(Exception e){
e.printStackTrace();
//java.net.SocketTimeoutException: Read timed out 이렇게 에러가 발생함
}finally{
if(socket != null){
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}}
//=====================================================
//*********************
//클라이언트 테스트 설정
//*********************
package com.incross.test;
import java.net.Socket;
public class SocketTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
Socket socket = new Socket("localhost",2000);
Thread.sleep(6000);// timeout 걸리는 시간보다 길게 sleep 을 걸어서 확인 함
}catch(Exception e){
e.printStackTrace();
}
}
}