服务器端如何同时监听多个Socket啊?ss10001 = new ServerSocket(10001);
client10001 = ss10001.accept();
ss10002 = new ServerSocket(10002);
client10002 = ss10002.accept();
ss10003 = new ServerSocket(10003);
client10003 = ss10003.accept();这样不可能啊!
运行到第一个accept就停了啊!

解决方案 »

  1.   

    用循环来accept,做accept以后起一个线程去做你刚刚监听到的socket.
      

  2.   

    accept(); 是个阻塞的操作,
    如果这是没有用户连接上来就一直等待。所以应该像楼上说的 用一个 循环来接受多个用户的连接,每接到一个客户端的连接就创建一个线程去服务,然后立即进入下一个等待。如果监听多个端口就开多个线程,每一个线程都循环等待请求同样对每一个连接开启新线程去服务。
      

  3.   

    socket程序是多线程的,在服务器端每收到一个client请求,你应该建立一个新的线程去处理当前的client请求。而不是在主线程里面去处理。你这样的写法只会一直等待处理第一个请求,如果第一个client连接上来,不发送任何数据的话,那你的server将不会再监听其他客户端的连接,因为它一直在input.readUTF()那里阻塞了。
      

  4.   

    不是很理解啊
    能不能写一个示例代码段让小弟看看
    Thread s10000Thread = new Thread(){
    public void run()
    {
    try {
    ss10000 = new ServerSocket(10000);
    client10000 = ss10000.accept();
                                ........
                           }
              }
    }
    这样吗?
      

  5.   

    这样试试private static int PORT;public class TestThread extend Threadpublic TestThread(PORT){
       sk = new socket(PORT);
       sk.accept();
    }在你的程序里调用这个THread
    Thread t1 = new ThreaD(5000);
    T1.START();
      

  6.   

    楼上的正解,楼主最好用for来做
      

  7.   

    ServerThread://服务器监听线程
         server = new SocketServer();
         Socket request = server.accept();      //这个方法会阻塞,一直等到有Client连接才会继续执行
         ClientRequestThread requestThread = new ClientRequestThread(request);
         requestThread.start();
    ClientRequestThread:客户端连接处理线程。处理客户端发送过来的数据
         run() {
                    DataInputStream dataInput = new DataInputStream(request.getInputStream())
                    dataInput.readInt(); //这个方法会阻塞,一直等到当前的request发送过来数据
                }
    ClientThread://客户端
          Socket client = new Socket(serverIp, serverPort);    //当客户端执行这个语句的时候Server端的accept()方法才会返回,要不然就一直等待在这个方法,你的Server程序不会往下执行。
      

  8.   

    用多线程吧,写个类,然后在主线程中
    new 类(端口1);
    new 类(端口2);
    .....................