2011-12-24 14 views
1

Javaソケット(クライアントソケットまたはサーバーソケット)が閉じられたときを検出する方法&クローズイベントが発生したときにコールバックメソッドを実行しますか? 私はこれを行うために例外処理を使用したくありません。私は(これは単なる想像上のコードである!)、このようなイベントハンドラまたはコールバックメソッドとして解決のために、このような何かを求めています:JavaでSocketClosedHandlerを作成するには?

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

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

}); 

答えて

0

あなたは例外処理を使用できないのはなぜ?これがAPIの設計方法です。

唯一の方法は、もう一方の側が何かを送信して、close()へのローカルコールを最初に行うことができるようにプロトコルを設計することですが、これは必ずしも機能しません。あたかも接続が予期せず閉じられたかのように。

2

ソケットを閉じるか、「反対側」がソケットを閉じるイベントを処理しますか?最初のケースでは、Socketをサブクラス化し、 'close'を呼び出すときに呼び出されるハンドラを追加できます。

後者の場合、これは自動的に検出されず、確実に検出することが難しく、ソケットを介して通信するために使用されるプロトコルに依存するという問題があります。例えば、 thisです。一般に、ソケットが実際に相手側によって閉じられているかどうかを判断するアクションを取らなければなりません。そうであれば、行動を起こす必要があります。どのようなアクションを取っても、そのアクションのために登録したコールバックハンドラも必ず呼び出すことができます。

関連する問題