본문 바로가기
JAVA

[ JAVA ] Socket 의 timeout 설정

by 정윤재 2012. 7. 20.

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();
  }
  

 }

}

 


댓글