我正在使用客户端服务器应用程序,并且当通过套接字接收到停止消息时,我想关闭服务器。我的服务器代码如下所示:>
public class Server extends Thread { private AtomicBoolean running = new AtomicBoolean(true); public synchronized void setRunning(boolean value){ running.set(value); } public void run(){ while(running.get()){ try { clientSocket = serverSocket.accept(); //doing stuff... }catch (IOException e) { logger.error("{} \n",e.getMessage()); } }
正在运行的变量在另一个处理我的消息的类中设置。该函数是这样写的
public synchronized void onReceive(Message message){ if(message.equals(stopMessage)){ server.setRunning(false); for(Client c : clients) c.shutdown(); server.shutdown(); } }
[我的问题是,服务器中的while循环在将运行变量设置为false之前执行了一次迭代,并且服务器甚至尝试检查套接字,甚至认为它为null,因为连接到该套接字的客户端已经关闭(客户端也处于关闭状态线程)。我做错了,但我不知道该怎么办。有任何想法吗?谢谢!
我正在使用客户端服务器应用程序,当通过套接字接收到停止消息时,我想关闭服务器。我的服务器代码看起来像这个公共类服务器扩展...
while
循环: