2011-12-24 5 views
1

java 소켓 (클라이언트 소켓 또는 서버 소켓)이 닫히는 것을 어떻게 감지 할 수 있습니까? & close 이벤트가 발생할 때 콜백 메소드를 실행합니까? 예외 처리를 사용하고 싶지 않습니다. 나는 (이것은 단지 가상의 코드입니다!) 같은 이벤트 핸들러 또는 콜백 메소드,이 같은으로 해결책을 모색하고 있습니다 :자바에서 SocketClosedHandler를 만드는 방법은 무엇입니까?

Socket s = new Socket(ip, port); 
s.addSocketClosedHandler(new SocketClosedHandler(){ 

    @Override 
    public void onSocketClosed(SocketClosedEvent e){ 
     ... 
    } 

}); 

답변

0

는 왜 예외 처리를 사용할 수없는 이유는 무엇입니까? 이것은 API가 설계된 방식입니다.

이렇게하는 유일한 방법은 프로토콜을 디자인하여 상대방이 닫을 때까지 무엇인가를 보내어 close()에 대한 로컬 전화를 먼저 걸 수 있도록하는 것입니다. 그러나 이것이 항상 작동하지는 않습니다. 마치 예기치 않게 연결이 끊어진 것처럼

2

소켓을 닫거나 '반대쪽'이 소켓을 닫는 이벤트를 처리 하시겠습니까? 첫 번째 경우에는 Socket을 서브 클래스 화하고 'close'를 호출 할 때 호출되는 핸들러를 추가 할 수 있습니다.

후자의 경우이 문제는 자동으로 감지되지 않고 안정적으로 감지하는 것이 어려울 수 있으며 소켓을 통해 통신하는 데 사용되는 프로토콜에 따라 달라질 수 있습니다. 예 : this 그래서 질문입니다. 일반적으로 상대방이 소켓을 실제로 닫았는지 확인하려면 조치를 취해야합니다. 그렇다면 조치를 취해야합니다. 어떤 작업을 수행하든, 해당 작업을 위해 등록한 콜백 처리기를 호출 할 수 있습니다.

관련 문제