0

切断クライアントのイベントを行っています。これが私のコードです:

public void run(){
    while(isConnected()){
        System.out.println("asd");          
    }
    serverListener.clientDisconnect(clientID);
}

public boolean isConnected(){
    if(socket.isClosed() || !socket.isConnected() || socket.isInputShutdown() || socket.isOutputShutdown()){
        return false;
    }
    return true;
}

問題は、私がこの結果を持っていることです:
isClosed = false
isConnected = true
IsInputShutdown = false
IsOutputShutdown = false

そして、クライアントが切断されると、同じ結果が得られます: 何も起こりません。

4

2 に答える 2

1

それは正しいです。これらのフラグは、あなたが何をしたかを示しています。

接続を閉じていない、一度接続された、入力または出力をシャットダウンしていない。

接続が閉じているかどうかを知る唯一の方法は、ソケットからの読み取りに失敗したときです。(または、セレクターから通知されます)

注: 相手側が接続を閉じたからといって、閉じたいとは限りません。HTTP リクエストがあり、サーバーがレスポンスを送信して接続を閉じるとします。すべてのデータを読み取っていない場合でも、ランダムな時点で、おそらく終了または開始する前に、接続を閉じますか? そうではありません。すべてのデータを読み取ったら、閉じられたことを知りたいのです。

于 2013-10-06T13:38:26.517 に答える
0

このコードで何が起こるかを確認してください。

public void run(){
    while(true){ 
        if(packetType == 1) {
            try { 
                String string = getString(); 
                serverListener.readString(string);
            } catch (IOException e) { break; }
        } else if(packetType == 2){
            try { 
                byte[] bytes = getByteArray();
                serverListener.readByteArray(bytes);
            } catch (IOException e) { break; }
        } 
    } 
    serverListener.clientDisconnect(clientID);
} 
于 2013-10-06T13:59:40.553 に答える