如何解决当所有客户端断开连接时如何停止服务器JAVA
我是霍吉。 在这段代码中,我的目标是在最后一个客户端断开连接时关闭服务器。 它是一个多线程服务器 (TCP),当客户端想要建立新连接时,它使用按需技术来实例化新线程。 我曾想过使用两个不同的 arrayList 来记住所有套接字属性(端口、地址等...):第一个用于登录,第二个用于注销;问题是我不明白如何在不同的类之间传递这些数组列表;因此,我无法从 Multiserver 类中获取已注销的客户端列表及其长度 (.size()) ,存储在 ServerThread 类中。四舍五入我想控制服务器何时停止执行,特别是当 connectedHost 列表的大小等于 logendedHosts 一次时。
public class MultiServer{
ServerThread st;
private ArrayList<String> connectedHost = new ArrayList<String>();
int logoutedHosts;
public static void main(String[] args){
MultiServer tcpServer = new MultiServer();
tcpServer.start();
}
public void start(){
try{
ServerSocket serverSocket = new ServerSocket(6789);
do{
Socket socket = serverSocket.accept();
st = new ServerThread (socket);
st.start();
connectedHost.add(""+socket);
}while(connectedHost.length() == logoutedHosts);
}
catch (Exception e){
//do things
}
}
}
public class ServerThread extends Thread{
Socket client = null;
int logoutedHosts=0;
public ServerThread (Socket socket){
this.client = socket;
}
@Override
public void run(){
try{
comunica();
}
catch(Exception e){
//do things
}
}
public void comunica() throws Exception{
while(true){
if(/*conditions*/){
logoutedHosts++;
break;
}
else{
//do things with connected clients,and keep the connection
}
}
client.close();
}
}
提前致谢。
附言我全神贯注,但这是我在论坛上提出的第一个问题,所以请耐心等待。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。