我需要知道如何在此程序中停止线程:
public class MasterServerThread extends Thread{
private Socket socket = null;
private MasterServer server = null;
private int clientID = -1;
private BufferedReader streamInput = null;
private PrintWriter streamOutput = null;
public MasterServerThread(MasterServer _server, Socket _socket){
server = _server;
socket = _socket;
clientID = _socket.getPort();
}
public void run(){
server.Log("Server Thread " +clientID + " running");
while(true){
String test;
try {
test = streamInput.readLine();
System.out.println("Client "+clientID+": "+test);
} catch (IOException e) {
System.out.println(clientID+ " Error reading: "+e.getMessage());
}
server.handleClient(clientID, "test");
}
}
}
这是我的服务器线程代码。当我的客户端自行终止时,我会得到无穷无尽的错误循环:
53088读取错误:连接重置0
我知道这里需要做些什么,但我不知道究竟是什么:
try {
test = streamInput.readLine();
System.out.println("Client "+clientID+": "+test);
} catch (IOException e) {
System.out.println(clientID+ " Error reading: "+e.getMessage());
}
答案 0 :(得分:4)
你应该更好地处理你的IOException
,然后从while(true)
循环返回(或中断)。我不确定你是否有任何理由想要在BufferedReader
抛出这样的例外之后继续读取它。
try {
test = streamInput.readLine();
System.out.println("Client "+clientID+": "+test);
} catch (IOException e) {
System.out.println(clientID+ " Error reading: "+e.getMessage());
// you need the return line here -- or a break
return;
}
答案 1 :(得分:0)
如果连接重置,最好的办法就是从run
方法返回,这将停止一个主题。