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 回答