ServerSocket.accept()会阻塞,然后每接受到客户端连接,该函数会返回一个Socket,
一般都是利用这个Socket启动一个新的线程,然后在新的线程中处理每个用户的输入。如果想使用更好的技术,可以研究java.nio

解决方案 »

  1.   

    to jinxfei(jinxfei):当ServerSocket启动了很多线程以后,这些线程是怎么样轮换来接收用户消息的呢?
      

  2.   

    用户发出的消息会在某个单独的线程中被收到,至于受到这些消息后怎么处理,应该是你的业务逻辑来决定。一般:
    ServerSocket ss=new ServerSocket(host, prot);
    Socket s=ss.accept();
    List clients=new ArrayList();
    Client c=new Client(s);
    c.start();
    //将客户端socket连接保存,以便将来进行消息发送。
    clients.add(c);class Client extends Thread{
     Socket mySock;
     public Client(Socket s){
      mySock=s;
     }
     public void run(){
      BufferedReader r=new BufferedReader(new InputStreamReader(s.getInputStream()));
      String clientMsg=null;
      while ((clientMsg=r.readLine()!=null)){
        //这里加入对客户端消息的处理。
      }
     }
      

  3.   

    线程的轮换是jvm线程调度机制决定的,你不用关心。