《java多线程,多用户聊天室,原理模型ChatDemo.docx》由会员分享,可在线阅读,更多相关《java多线程,多用户聊天室,原理模型ChatDemo.docx(9页珍藏版)》请在三一办公上搜索。
1、java多线程,多用户聊天室,原理模型ChatDemo/*服务器端类ChatServer */import java.io.IOException;import .ServerSocket;import .Socket;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;public class ChatServer /公共聊天室public static void main(String args) throws IOException ServerSocket ss=new ServerS
2、ocket(6666);List<Socket> socketList=new LinkedList<Socketwhile(true)Socket socket=ss.accept;socketList.add(socket);Thread t=new Thread(new ChatThread(socket,socketList);t.start;/*服务器端类ChatThread */import java.io.*;import .*;import java.util.List;public class ChatThread implements Runnablepriva
3、te List<Socket> socketList;private Socket socket;private BufferedReader bufferedReader;public ChatThread(Socket socket,List<Socket> socketList)this.socket=socket;this.socketList=socketList;private void preRunInputStreamReader r=null;try r = new InputStreamReader(this.socket.getInputStream);t
4、his.bufferedReader=new BufferedReader(r); catch (IOException e) e.printStackTrace;private PrintWriter getSocketPrintWriter(Socket socket)OutputStream os=null;try os = socket.getOutputStream; catch (IOException e) e.printStackTrace;OutputStreamWriter osw=new OutputStreamWriter(os);BufferedWriter bw=n
5、ew BufferedWriter(osw);return new PrintWriter(bw, true);private void broadcast(String msg)for(Socket s:socketList)PrintWriter pw=this.getSocketPrintWriter(s);pw.println(msg);public void run String msg=;this.preRun;while(true)try msg=from client +this.bufferedReader.readLine;this.broadcast(msg); catc
6、h (IOException e) try this.bufferedReader.close;this.socket.close;this.socketList.remove(this.socket);this.broadcast(somebody exist.people size :+socketList.size); catch (IOException e1) e1.printStackTrace;e.printStackTrace;return ;/*客户端类ChatClient,CTGetMessage,CTSendMessage*/import java.io.*;import
7、 .*;import java.util.Scanner;public class ChatClient public static void main(String args) throws Exception Socket socket=new Socket(127.0.0.1, 6666);Scanner sc=new Scanner(System.in);System.out.print(输入名字:);String name=sc.nextLine;System.out.println(客户端已经链接.);CTGetMessage g = new CTGetMessage(socket
8、);CTSendMessage s = new CTSendMessage(socket,name);Thread gt = new Thread(g);Thread st = new Thread(s);gt.start;st.start;class CTGetMessage implements Runnable private Socket socket;private BufferedReader bufferedReader;public CTGetMessage(Socket socket) this.socket = socket;InputStreamReader r = nu
9、ll;try r = new InputStreamReader(this.socket.getInputStream); catch (IOException e) e.printStackTrace;this.bufferedReader = new BufferedReader(r);public void run String msg = null;while (true) try msg = this.bufferedReader.readLine;System.out.println(msg); catch (IOException e) e.printStackTrace;cla
10、ss CTSendMessage implements Runnable private Socket socket;private PrintWriter printWriter;private BufferedReader bufferedReader;private String name;public CTSendMessage(Socket socket,String name) this.name=name;this.socket = socket;try InputStreamReader isr = new InputStreamReader(System.in);buffer
11、edReader = new BufferedReader(isr);OutputStream os = socket.getOutputStream;OutputStreamWriter osw = new OutputStreamWriter(os);BufferedWriter bw = new BufferedWriter(osw);this.printWriter = new PrintWriter(bw, true); catch (IOException e) e.printStackTrace;public void run String msg = null;while (true) try msg =name+:+ bufferedReader.readLine;printWriter.println(msg); catch (Exception e) e.printStackTrace;