是不是循环的时候实例化了很多个Socket对象的缘故呀      while(true)
      {
        Socket  socket=serverSocket.accept();
        inStream=new DataInputStream(socket.getInputStream());
        outStream=new DataOutputStream(socket.getOutputStream());
        ......
       }

解决方案 »

  1.   

    你应该把accept拿到每道线程的死循环外面来:
    这是一个单线程的例子:
      public void listenSocket(){    try{
          server = new ServerSocket(7456); 
          client = server.accept();
        } catch (IOException e) {
          System.out.println(e.toString());
          System.exit(-1);
        }    try{
          in = new BufferedReader(new InputStreamReader(client.getInputStream()));
          out = new PrintWriter(client.getOutputStream(), true);
        } catch (IOException e) {
          System.out.println("Accept failed: 7456");
          System.exit(-1);
        }
    //accept应该在while外面
        while(true){
          try{
            line = in.readLine();
    //Send data back to client
            out.println(line);
          } catch (IOException e) {
            System.out.println("Read failed");
            System.exit(-1);
          }
        }
      }
      

  2.   

    你需要建立一个与客户的ServerConn。
      

  3.   

    在java高级服务器编程里有socket的例子,如果你是要建一个server等待客户消息的话。
      

  4.   

    每ServerSocket接收到一个连接(Socket)新建一个线程,同时把连接好的Socket当作参数传给线程实例,也就是把Socket当作构造方法的参数。