我想知道是否有辦法知道在任何時間點都連接到服務器的客戶端。我正在使用套接字/ 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多線程服務器客戶端