端口只是来监听的,当然可以再accept(),然后用多线程,为每个连接开辟一个线程
ServerSocket ChatServer=new ServerSocket(port);
while(true)
{
  Socket client=ChatServer.accept();
  Chat oneclient=new Chat(IS_Require);
  Thread MST_Moniter=new Thread(oneclient);
  MST_Moniter.start();
}chat 是一个实现了runnable interface的类

解决方案 »

  1.   

    是啊   我就是 这么做的
    可是他抛出错误  说端口被使用了
    这和client有关系吗?
      

  2.   

    你是把ServerSocket ChatServer = new ServerSocket(port)
    也放到了while循环里面了吧?
      

  3.   

    不要把serversocket的声明放在循环里面,声明一次就可以了
      

  4.   

    /*@file:    Serverprocess.java
      @descrip: 服务器端信息发送
      @ver 1.0
      @author: whyin
      @date  2001.11.08
    */import java.io.*;
    import java.net.*;
    import javax.swing.*;//Server Thread Process
     class ServerThread extends Thread {
    boolean listener_begin = true ;  // 监视端口信息
    Socket socket ;
    ServerSocket serverSocket = null ;
    public static String recData = null;
    public static String sendData = null ;
    BufferedReader in = null ;
    PrintWriter out =null; //init Serverprocess : build ServerSocket
    public ServerThread(Socket socket){
    try{
    in=new BufferedReader(new InputStreamReader(socket.getInputStream()));//创建输入流
    out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);//创建输出流
    }catch(IOException ie){
    messagebox("ServerThread contruck: "+ie.toString());
    return;
    }
    } //Thread run()
    public void run(){
      try{
               recData = readStream(in);
               System.out.println("recData" + recData);
               sleep(6);
        }catch(java.lang.InterruptedException ine ){
    System.out.println("41 行 sleep() 原因:"+ine.toString());
    }
    } /*    void sendData
          Descrip:发送数据
          parm:Socket
    */
    public void sendData(String s){
    //try{
     //PrintWriter out = new PrintWriter(sendSocket.getOutputStream(),true);
     out.println("服务器:接到了!");
     out.println(s);
       //}catch(IOException e){
    //   messagebox(e.toString());
       //}
    }
    /*    void getReceiveData
          descrip:获得接受的数据
          return:String
    */
    public  String getReceiveData(){
    return recData;
    }
        /*    void getReceiveData
          descrip:获得接受的数据
          return:String
    */
    public  String getSend(){
    return sendData;
    }
        /*       void     readString
         Descrip  由BufferedReader读出数据
         pram:    InputStream in
         return:  String
         */
       public String readStream(BufferedReader input){
      boolean begin = false ;
      String sData= null;
      String line = null ;
      try{
    while (!begin){
      line = null;
      line = input.readLine();
      if (line == null || line.trim().equals("whynetend_temp001")){
      begin = true;
      }else{
      if (sData == null){
      sData=line ;
     // System.out.println("sss"+sData);
      }else {
      sData = sData+"\n"+line;
     // System.out.println(sData);
      }
      }
      }
                //System.out.println(sData);
       }catch (IOException e){
       messagebox(e.toString());
      return sData;
       }
       return sData ;
    }   /*      void messagebox
        descrip: 提示信息
        parm: String s
      */
    void messagebox(String s){
    JOptionPane.showMessageDialog(null, "出错:"+s, "系统信息", JOptionPane.ERROR_MESSAGE);
       }
    }//主服务器类----------------------------------------------------------------------//
    public class ServerSM{
    public static int sendport = 1210 ;
    static int port=9999 ;
    public static  Socket socket=null;
    public ServerSM(){
    }
    public ServerSM(int port){
            this.port = port ;
    }
    public static void main(String args[]) throws IOException{
            serverStart();
        }
        public static  void serverStart(){
    ServerSocket serverSocket = null;
    try{
    serverSocket=new ServerSocket(port);//在9999端口创建套接口
        System.out.println("Server start.."+serverSocket);
     while(true){
     socket=serverSocket.accept();//无限监听客户的请求
     sendport = socket.getPort();
     System.out.println("Connectino accept:"+socket +"  PORT" + socket.getPort());
     ServerThread thread = new ServerThread(socket);//创建新线程
     thread.start();
     }
     }catch(IOException ie){
     System.out.println("创建ServerSocket出错:" + ie.toString());
     }finally{
     try{
       serverSocket.close();
         }catch(IOException e){}
     }//捕或异常
    }
    }//服务器程序结束
    //----------------------------//
    希望兄弟好好研究研究,这也是我自己写来的
      

  5.   

    端口被占是常见的错误
    因为你没有释放呀
    你的程序没有正常结束
    或者你干脆没有写端口释放语句
    前几天我也在做一个类似的程序
    细心找找
    注意,每个用户退出时
    你要将他的socket对象释放
      

  6.   

    谢谢  这个问题已经解决了
    socket怎么释放呢?socket=null;可以吗?还有我想把线程也释放掉,用什么方法放的最干净呢?
      

  7.   

    http://www.csdn.net/develop/read_article.asp?id=13067
      

  8.   

    在服务端用ServerSocket(0)来打开一个没有被占用的端口。然后用getPort()
    取得打开的端口。
    socket.close();
    socket流.close();
    线程结束最好能有个线程结束标志,当标志为真时退出线程的run方法。