我正在为断开连接客户端做事件。 这是我的代码:
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
当客户端断开连接时,我得到了相同的结果:没有任何反应。
答案 0 :(得分:1)
这是正确的。那些标志告诉你你做了什么。
您尚未关闭连接,它已连接一次,您没有关闭输入或输出。
了解连接是否已关闭的唯一方法是无法从套接字读取。 (或者您的选择器会通知您)
注意:仅仅因为另一端关闭了连接,并不意味着你要关闭。想象一下,您有一个HTTP请求,您的服务器会向您发送响应并关闭连接。即使您没有在某个随机点读取所有数据,也可能在完成甚至开始之前,您是否希望连接关闭?你没有,你想知道一旦你读完了所有数据它就被关闭了。
答案 1 :(得分: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);
}