接收到一个连接后就将它丢到线程组里面,由多线程处理请求

解决方案 »

  1.   

    老兄,结构做成多线程! 以ServerSocket.accept();为开辟线程的判断标志. 每当有client请求后,就在while()循环里开辟一个单独的线程, 然后在循环while() . 如果没有client请求,在,主线程在ServerSocket.accept()处等待!    当然,开辟的这个线程要接收一个参数,那就是clientsocket=new ServerSocket(Port); 以前我做了一个和你类似的服务器程序,不放参考一下!        /**
         * 服务器接收客户端数据的方法,里面是一个无限循环等待被请求的过程
         */
        public void ServerClient() {
        try {
              try{
                //创建服务器socket
                //声明一个字符串变量存储所取出的服务器端口号的字符串形式
                String strserverport=null;
                strserverport=Integer.toString(serverport);
                //判断从配置文件中读取的服务器端口号是否合法
                if(strserverport!=null && strserverport.length()==4){
                    server = new ServerSocket(serverport);                 }else{//如果不法,责默认服务器端口号为1234             server=new ServerSocket(1234);
                }//判断服务器端口号结束
              }catch(Exception e){
                //如果设置端口号异常,则提示管理员,重启服务器
                System.out.println("设置服务器监听端口号有异常");
                e.printStackTrace();
               }//end 创建服务器socket       while(true){
               //等待客户的连接请求(程序堵塞直到有客户端请求)
               Thread.sleep(10);
               System.out.println("Wait client request  ......");
              try{
               //这里只接受connect的连接请求,所有数据处理的入口
               client = server.accept();           //很关键的一步,给接收的客户端Socket设定接收数据流等待时间的属性
               client.setSoTimeout(70000);           //提示客户端的IP地址
               System.out.println("ClientIP=: " +client.getInetAddres().getHostAddress()+" connect request");
               //声明一个处理客户端传过来的数据处理线程类的实例
               receiveMsgFromClient receiveMsgFromClient=new receiveMsgFromClient(client,operatedb);
               //启动处理客户端的发送来的数据线程
               receiveMsgFromClient.start();
              }catch(Exception e){
                e.printStackTrace();
              }
             }  //end while(true)
        }catch(Exception e){
             e.printStackTrace();
             System.out.println("Connect client error! Server must be Restart!!!");
        //重新启动服务器
        }
      } //end run()