TCP之Eclipse控制台的群聊

来源:互联网 发布:凯文.米特尼克 知乎 编辑:程序博客网 时间:2024/05/16 15:39

1、服务端的主线程通过List存储每个客户端传过来的Socket。
子线程接收客户端传来的消息,通过遍历List把某一个传过来的消息发送给所有的客户端,实现群聊功能。

2、客户端主线程实现从控制台发送消息
子线程实现接收客户端发来的消息,显示在控制台即可

服务端

public class Server {    public static void main(String[] args) {        try {            ServerSocket ss=new ServerSocket(9999);            List<Socket> li=new ArrayList<>();            while(true){                Socket s=ss.accept();                System.out.println("连接成功");                li.add(s);                new SThread(s, li).start();            }        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}class SThread extends Thread{    private Socket s;    private List<Socket> li;    public SThread(Socket s, List<Socket> li) {        super();        this.s = s;        this.li = li;    }    public void run() {    try {        BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));        while(true){            String SString=br.readLine();            for(Socket s1:li){                BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s1.getOutputStream()));                bw.write(SString);                bw.newLine();                bw.flush();            }        }    } catch (IOException e) {        // TODO Auto-generated catch block        e.printStackTrace();    }    }}

客户端:

public class Client {    public static void main(String[] args) {        try {            Socket s=new Socket("127.0.0.1",9999);            BufferedReader br=new BufferedReader(new InputStreamReader(System.in));            BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));            while(true){            new CThread(s).start();            String Scli=br.readLine();            bw.write(Scli);            bw.newLine();            bw.flush();            }        } catch (UnknownHostException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}class CThread extends Thread{    //读取服务端消息    private Socket s;    public CThread(Socket s) {        super();        this.s = s;    }    @Override    public void run() {        try {            BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));            while(true){                String Sse=br.readLine();                System.out.println("服务器发来消息:"+Sse);            }        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}
0 0
原创粉丝点击