java socket-3--多客户端与服务器的交互

来源:互联网 发布:犀牛软件版本分析 编辑:程序博客网 时间:2024/06/05 19:24

上一篇> java socket-2–即时通信

利用多线程,每当一个客户端发送一个请求过来,就使用一个子线程去处理它
不过此代码只可以做到多客户端向服务端发送信息,不能做到服务端对多客户端发送信息
客户端的代码与上篇的客户端代码一样,所以不贴出来,只贴服务端的代码


服务端

package 通信1;import java.io.BufferedReader;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;public class ServerThreadDemo {    public static void main(String[] args){    Socket client = null;    ServerSocket server = null;    try {        server = new ServerSocket(10007);    } catch (IOException e1) {        e1.printStackTrace();    }    int num = 1;    while(true){        try {        client = server.accept();        System.out.println("客户端"+num+"已经连接");        new Thread(new ThreadServer(num, client)).start();        num++;        } catch (IOException e) {        e.printStackTrace();        }    }    }}  class ThreadServer implements Runnable{    private String name;    private int num;    private Socket client;    public ThreadServer(int num,Socket client){    this.num = num;    this.client = client;    }    public void run(){    new Thread(new ServerReadThread1(client,num)).start();    new Thread(new ServerWriteThread1(client)).start();    }}//--------------------------------------------------------处理读操作的线程class ServerReadThread1 implements Runnable{  private Socket client = null;  private int num ;  public ServerReadThread1(Socket client,int num){    this.num = num;    this.client = client;  }  public void run(){    //--------------------------------------------------接受来自客户端的信息    DataInputStream dis = null;      try {        while(true){            dis = new DataInputStream(client.getInputStream()); //读取客户端的信息                          String inMess = dis.readUTF();            System.out.println("客户端"+num+"说:"+inMess);         }            } catch (IOException e) {        System.out.println("失去连接");        // e.printStackTrace();       }              }}//----------------------------------------------------------处理写的线程class ServerWriteThread1 implements Runnable{  private Socket client = null;  public ServerWriteThread1(Socket client){    this.client = client;  }  public void run(){    BufferedReader in = null;    DataOutputStream dos = null;      try {        while(true){            dos = new DataOutputStream(client.getOutputStream());             //-----------------------------------------------从键盘获得消息            in = new BufferedReader(new InputStreamReader(System.in));            String mess  = in.readLine();            dos.writeUTF(mess);            System.out.println("服务端:"+mess);        }        } catch (IOException e) {        //失去连接        e.printStackTrace();        }  }}