Socket做服务器时 怎么同时和多个客户端通信,或只对应指定IP的客户端通信??

解决方案 »

  1.   

     把创建的SOCKET对象  写人HASHMAP中 可以吗??
      

  2.   

    关键就是服务器给客户端发 信息时指定客户端我用的发送语句是这样的                //接收客户连接,只要客户进行了连接,就会触发accept();从而建立连接
                    socket=serverSocket.accept();
                   
                    executorService.execute(new Handler(socket));
                    
                    System.out.println("*-*-*-*-*-*-*-*-*-* 2 *-*-*-*-*-*-*-*-*-*");
                   
                   
                    OutputStream os=socket.getOutputStream();
                    os.write(v);
                    os.flush(); 
    怎么修改呢?
      

  3.   

    new Handler(socket) 是自己定义的线程吧? 那你后面还要来干麻?直接交给线程去处理就好了!
      

  4.   

    public class InnerService implements Runnable{
    private Socket socket;
    public InnerService(Socket socket){
    this.socket = socket;
    this.run();
    }
    private PrintWriter getWriter(Socket socket) throws IOException{
    if(socket==null) return null;
    OutputStream ops = socket.getOutputStream(); 
    return new PrintWriter(ops,true);
    }
    private BufferedReader getReader(Socket socket) throws IOException{
    if(socket==null) return null;
    InputStream reader = socket.getInputStream();
    return new BufferedReader(new InputStreamReader(reader));
    }

    public void run(){
    try {
    TestBean tb ,senttb;
    PrintWriter pw = getWriter(socket);
       OutputStream out=socket.getOutputStream();
           ObjectOutputStream oos=new ObjectOutputStream(out);
           InputStream in=socket.getInputStream();
           ObjectInputStream ois=new ObjectInputStream(in);
                    try {
    while((tb = (TestBean)ois.readObject())!=null){
    System.out.println(tb.getMsg()+" Thread hashCode :"+this.hashCode());
    senttb=new TestBean();
    senttb.setMsg("Normal Transport!receive:" +tb.getMsg());
    if(tb.getMsg().equals("Msg")) {
    senttb.setMsg("Close");
    System.out.println("Server: Receive Close Signal! Preper to close!");
    socket.shutdownInput();
    socket.shutdownOutput();
    System.out.println("Server: Everything has been finished!");
    break;
    }else
    oos.writeObject(senttb);
    }
    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }finally{
    if(socket!=null) socket.close();
    }
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }自己写的小程序, InnerService 就你哪个 Handler