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