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();
}
}
}
'JAVA' 카테고리의 다른 글
[ JAVA ] HTML 을 PDF 으로 변환 (10) | 2012.11.09 |
---|---|
[ JAVA ] According to TLD or attribute directive in tag file, attribute test does not accept any expressions (0) | 2012.08.03 |
[ JAVA ] apache commons cli ( command line interface ) (0) | 2012.06.27 |
[ JAVA ] Unsupported major.minor version xx (0) | 2012.06.13 |
[ JAVA ] 자바 property 파일 위치 찾는 법 과 사용법 2 (0) | 2012.04.05 |
댓글