2013-05-14 46 views

回答

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」查看所有活動連接和所有偵聽端口。 如果你想在你的應用程序級別,然後使用一個列表或計數器,每增加一個接受和減少套接字關閉。