0
我在写一个简单的多线程聊天服务器。每个客户端在连接时创建新线程多线程服务器 - 如何正确处理客户端和服务器断开连接
Thread listenThread = new Thread(() -> {
while (true) {
try {
Socket client = serverSocket.accept();
ClientThread handler = new ClientThread(this, client);
clients.add(handler);
handler.start();
} catch (SocketException e) {
if (e.getMessage().contains("socket closed"))
break;
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
此方法适用于检查客户端是否关闭连接。
class ClientThread extends Thread {
@Override
public void run() {
while(running) {
int read = inputStream.read();
if(read > 0) {
// read
}
else if(read < 0)
running = false;
}
}
};
的问题是,当我想停止服务器,我不能放弃线程,因为inputStream.read()
块执行,以便设置running
变量设置为false不起作用。如何使它工作?
只要在服务端关闭套接字就可以完成相同的事情。然而,他的问题在于,这些线程在'read()'中被阻塞,因此无法让他们执行任何操作。 – EJP