我有两个 while 条件,一个在另一个里面,用布尔值来控制它们。基本上,一个用于终止共享,另一个用于侦听连接。用户可以选择禁用共享,在这种情况下,服务器会停止侦听,但不会终止。如果用户选择终止,则两个布尔值都设置为 false 并且循环结束。
这是我的代码:
public void run() {
while (!terminate) {
while (listening) {
try {
// accept connection -> create a new thread for each client
ClientServerShareInstance clientServerShareInstance = new ClientServerShareInstance(serverSocket.accept(), ui);
Thread clientServerThread = new Thread(clientServerShareInstance);
clientSockets.add(clientServerShareInstance);
connectedClients++;
clientServerThread.start();
} catch (IOException ex) {
}
}
}
}
public void closeAllClientConnections() {
for (Iterator it = clientSockets.iterator(); it.hasNext();) {
ClientServerShareInstance clientServerShareInstance = (ClientServerShareInstance) it.next();
clientServerShareInstance.closeAllConnections();
it.remove();
}
try {
this.serverSocket.close();
} catch (IOException ex) {}
this.setActive(false);
this.connectedClients = 0;
}
public void openConnection() {
try {
serverSocket = new ServerSocket(portNumber, 0, Inet4Address.getLocalHost());
setActive(true);
} catch (IOException ex) {}
}
}
该closeAllClientConnections()
方法禁用共享(不终止它),并openConnection()
重新启用该共享。
问题是,如果我禁用共享,它应该只是terminate
无限期循环 while cicle,测试listening
. 当我设置listening
为 时true
,它应该重新进入第二个 while 循环并再次开始侦听,因为我确实打开了服务器套接字(虽然它与此无关,但我只是说它必须再次初始化,因为我关闭它时我禁用共享)。但是,禁用后,它永远不会租用listening
循环,即使openConnection()
被调用也是如此。
有人知道这里有什么问题吗?