본문 바로가기

소프트웨어/Android/Java/Ndk

TcpServer] Java Shutdown Hook

Java로 TCP Local Server를 만들다가 Address already in use: JVM_Bind programmable 오류를 만났다. 내가 임의로 지정한 PORT가 여러번 실행되면서 오류가 발생한 것이다.

단일 Socket만 열 것이기 때문에 Exception으로 인한 프로그램 종료시 Event Hooking을 시도하였다.

(사실 더 좋은 방법이 생각나지 않아서 이렇게 했음. 더 좋은 방법 아시는 분은 댓글로 의견 부탁드려요)



Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
			
			@Override
			public void run() {
				MSLog.log("@shutdown hook tread");
				try {
					TcpServer.getInstance().close();
				} catch (IOException e) {
					MSLog.log("@shutdown hook tread. TcpServer Close Fail");
					e.printStackTrace();					
				} finally {
					MSLog.log("@shutdown hook tread. TcpServer Close Complete");
				}
			}
		}));



이렇게 Shutdown시 hook을 사용하여 코드를 넣었더니 오류가 해결되었다.

뭔가 찝찝하긴 하다..


% MSLog와 TcpSever Class는 임의 작성 class 임


% MSLog는 형변환 귀찮아서 만든 Java Generic 이용한 Log. 

  static boolean DBG 값에 따라서 형 변환 없이 로그 출력 http://mantdu.tistory.com/841



public class MSLog {

private static String psmTitle = "GTK_WIFISOUND_LOG >> ";

static public <T extends Object> void log(T msg) {

if(StaticData.DBG) System.out.println(psmTitle.concat(msg+""));

}

}