我想知道是否有办法知道在任何时间点都连接到服务器的客户端。我正在使用套接字/ Java。 即,如果服务器正在侦听的客户端数量为“n”,那么是否有可能跟踪连接的客户端?显然,isConnected()和isClosed()方法不能为我提供我正在寻找的解决方案。请帮助如何跟踪多客户端服务器应用程序中的活动客户端?
2
A
回答
0
1)如果要创建然后多客户端 - 服务器程序考虑这样做它作为多线程的客户机 - 服务器程序。
2)为每个新客户创建新Thread
。这独特Thread
创建将帮助您跟踪所有活动客户端线程。
3)可检查已创建的client threads
的状态,如下:
来源 >>http://docs.oracle.com/javase/6/docs/api/java/lang/Thread.State.html
Thread.getState()
将返回以下Thread.State
可能状态的1:
NEW:尚未启动的线程处于此状态。
RUNNABLE:在Java虚拟机中执行的线程处于此状态。
BLOCKED:被阻塞等待监视器锁定的线程处于此状态。
WAITING:无限期等待另一个线程执行特定动作的线程处于此状态。
TIMED_WAITING:正在等待另一个线程执行动作达到指定等待时间的线程处于此状态。
TERMINATED:已退出的线程处于此状态。
1
我会做这样
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));
}
}
}
0
你的意思是连接到服务器或连接到您的应用程序? 在Unix/Windows下,使用“netstat -a”查看所有活动连接和所有侦听端口。 如果你想在你的应用程序级别,然后使用一个列表或计数器,每增加一个接受和减少套接字关闭。
相关问题
- 1. C#服务器客户端应用程序(一个服务器多客户端)
- 2. C客户端服务器应用程序中的多个客户端
- 3. 服务器客户端应用程序
- 4. 客户端/服务器应用程序
- 5. 客户端 - 服务器应用程序
- 6. Web服务客户端堆栈跟踪
- 7. C客户端在服务器客户端应用程序中的进程ID
- 8. java客户端服务器应用程序 - 无法创建多个客户端
- 9. 服务器端客户端程序C
- 10. Java客户端服务器/一个线程多个客户端
- 11. Java:服务器/客户端 - >客户端/客户端
- 12. 如何跟踪服务器上的特定客户端请求?
- 13. 服务器的客户端应用程序的Android客户端VS仅
- 14. Java中的服务器客户端:无法启动客户端
- 15. 结合Google Analytics客户端和服务器端跟踪
- 16. 访问跟踪 - 服务器端/客户端
- 17. Web服务客户端应用程序
- 18. RMI客户端跟踪
- 19. node.js/socket.io - 跟踪客户端
- 20. c - 具有多个客户端的UDP客户端服务器
- 21. 多客户端C服务器的异步C客户端
- 22. 具有多个客户端的Java服务器客户端
- 23. 使用qt的多客户端/服务器tcp应用程序
- 24. 与C++服务器/客户端应用程序的端口
- 25. Flex构建客户端和服务器端的应用程序
- 26. 服务器端VS客户端MVC的Web应用程序
- 27. Java多线程服务器客户端应用程序
- 28. 客户端服务器多线程应用程序
- 29. 客户端 - 服务器多线程
- 30. Java多线程服务器客户端