Java 如何跟踪多客户端服务器应用程序中的活动客户端?
我想知道是否有办法知道在任何时候都连接到服务器的客户端。我正在使用Sockets/Java。 i、 e如果服务器正在侦听的客户端数量为“n”,那么是否可以跟踪所连接的客户端??显然,isConnected()和isClosed()方法并没有为我提供我正在寻找的解决方案。请帮助< /P> < P> <强> 1 > <强>如果您正在创建多客户端服务器程序,那么考虑将其作为多线程客户机服务器程序来执行。 2)为每个新客户端创建新的Java 如何跟踪多客户端服务器应用程序中的活动客户端?,java,sockets,Java,Sockets,我想知道是否有办法知道在任何时候都连接到服务器的客户端。我正在使用Sockets/Java。 i、 e如果服务器正在侦听的客户端数量为“n”,那么是否可以跟踪所连接的客户端??显然,isConnected()和isClosed()方法并没有为我提供我正在寻找的解决方案。请帮助< /P> < P> 1 > 如果您正在创建多客户端服务器程序,那么考虑将其作为多线程客户机服务器程序来执行。 2)为每个新客户端创建新的线程。这个独特的线程创建将帮助您跟踪所有活动的客户端线程 3)您可以检查已创建的客户
线程。这个独特的线程
创建将帮助您跟踪所有活动的客户端线程
3)您可以检查已创建的客户端线程的状态,如下所示:
来源>
Thread.getState()
将返回以下Thread.State
可能的状态之一:
新建:尚未启动的线程处于此状态
RUNNABLE:在Java虚拟机中执行的线程处于此状态
被阻止:被阻止等待监视器锁定的线程处于此状态
等待:无限期等待另一个线程执行特定操作的线程处于此状态
TIMED_WAITING:等待另一个线程执行操作的线程在指定的等待时间内处于此状态
终止:已退出的线程处于此状态。我会这样做
public class Test1 {
static Collection<Socket> activeSockets = new ConcurrentLinkedQueue<>();
static class Task implements Runnable {
Socket sk;
Task(Socket sk) {
this.sk = sk;
}
public void run() {
activeSockets.add(sk);
try {
...
} finally {
activeSockets.remove(sk);
}
}
}
public static void main(String[] args) throws Exception {
ExecutorService ex = Executors.newCachedThreadPool();
ServerSocket server = new ServerSocket(5555);
for (;;) {
Socket sk = server.accept();
ex.execute(new Task(sk));
}
}
}
公共类Test1{
静态集合activeSockets=new ConcurrentLinkedQueue();
静态类任务实现可运行{
插座sk;
任务(套接字sk){
this.sk=sk;
}
公开募捐{
activeSockets.add(sk);
试一试{
...
}最后{
活动套接字。移除(sk);
}
}
}
公共静态void main(字符串[]args)引发异常{
ExecutorService ex=Executors.newCachedThreadPool();
ServerSocket服务器=新的ServerSocket(5555);
对于(;;){
Socket sk=server.accept();
执行(新任务(sk));
}
}
}
您的意思是连接到服务器还是连接到应用程序?
在Unix/Windows下,使用“netstat-a”查看所有活动连接和所有侦听端口。
如果你想在你的应用程序级别使用一个列表或计数器,当套接字关闭时,该列表或计数器在每次接受时递增,在每次接受时递减