Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何跟踪多客户端服务器应用程序中的活动客户端?_Java_Sockets - Fatal编程技术网

Java 如何跟踪多客户端服务器应用程序中的活动客户端?

Java 如何跟踪多客户端服务器应用程序中的活动客户端?,java,sockets,Java,Sockets,我想知道是否有办法知道在任何时候都连接到服务器的客户端。我正在使用Sockets/Java。 i、 e如果服务器正在侦听的客户端数量为“n”,那么是否可以跟踪所连接的客户端??显然,isConnected()和isClosed()方法并没有为我提供我正在寻找的解决方案。请帮助< /P> < P> 1 > 如果您正在创建多客户端服务器程序,那么考虑将其作为多线程客户机服务器程序来执行。 2)为每个新客户端创建新的线程。这个独特的线程创建将帮助您跟踪所有活动的客户端线程 3)您可以检查已创建的客户

我想知道是否有办法知道在任何时候都连接到服务器的客户端。我正在使用Sockets/Java。 i、 e如果服务器正在侦听的客户端数量为“n”,那么是否可以跟踪所连接的客户端??显然,isConnected()和isClosed()方法并没有为我提供我正在寻找的解决方案。请帮助< /P> < P> <强> 1 > <强>如果您正在创建多客户端服务器程序,那么考虑将其作为多线程客户机服务器程序来执行。 2)为每个新客户端创建新的
线程。这个独特的
线程
创建将帮助您跟踪所有活动的客户端线程

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”查看所有活动连接和所有侦听端口。 如果你想在你的应用程序级别使用一个列表或计数器,当套接字关闭时,该列表或计数器在每次接受时递增,在每次接受时递减