我正在编写一个简单的多线程聊天服务器。每个客户端在连接时都会创建新线程
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无效。如何使它工作?
答案 0 :(得分:0)
答案 1 :(得分:-1)
class ClientThread extends Thread {
@Override
public void run() {
String input;
while(running) {
input = inputStream.read();
if(input.lengt > 0) {
if(input.equals("shutdowncode"))
break;
}
}
}
};
从服务器向客户端发送关闭代码,告知客户端断开连接