我正在創建一個多線程服務器,它將接收來自客戶端的消息,處理併發回結果。如何停止服務器線程(並可能稍後激活它)?
問題是,當我想服務器線程停止,它不會。
即使設置了stopFlag=true
,客戶端仍然可以連接到服務器並獲得結果。
如何停止服務器線程(並可能稍後激活它)?
我嘗試了所有這些,但他們沒有奏效。
Java server socket program after one day it stops listening
Close listening ServerSocket http://tutorials.jenkov.com/java-multithreaded-servers/multithreaded-server.html
public class ServerStart implements Runnable{
private JTextArea servLog;
private boolean stopFlag=false;
public ServerStart(JTextArea servLog){
this.servLog=servLog;
}
public void setStopFlag(boolean stop){
stopFlag=stop;
}
@Override
public void run() {
int port=444;
try {
ServerSocket serverSock = new ServerSocket(port);
synchronized(this){
while(!stopFlag){
Socket clientSock=null;
try{
clientSock = serverSock.accept();
}catch(IOException e){
if(stopFlag){
System.out.println("Server stop");
return;
}
throw new RuntimeException("Error accepting client connection", e);
}
Thread listener = new Thread(new Socket_test(clientSock, port,servLog));
listener.start();
}
serverSock.close();
}
} catch (IOException ex) {
Logger.getLogger(ServerStart.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
這很好,你提到你已經嘗試過的東西,但也請添加什麼,當你嘗試每一種解決方案都無法正常工作。 – RealSkeptic
那麼,他們不會顯示任何錯誤。客戶端和服務器運行良好。 唯一的問題是,即使設置了stopFlag,我也無法關閉服務器線程。 – raynus
你真的嘗試第三個解決方案*完全*嗎?包括其中有* synchronized方法*的事實? – RealSkeptic