Socket+多线程实现控制台聊天室

xiaoxiao2021-02-28  140

链接

client.java:

//我的github:https://github.com/ygj0930 //我的博客:http://www.cnblogs.com/ygj0930/ import java.io.*; import java.net.*; import java.util.*; public class Client{ public int port=8080; Socket socket=null; public static void main(String[] args) { new Client(); } public Client() { try { socket=new Socket("127.0.0.1",port); new Cthread().start(); BufferedReader br = new BufferedReader(new InputStreamReader(socket .getInputStream())); String msg1; while ((msg1 = br.readLine()) != null) { System.out.println(msg1); } }catch (Exception e) { } } class Cthread extends Thread { public void run() { try { BufferedReader re = new BufferedReader(new InputStreamReader(System.in)); PrintWriter pw = new PrintWriter(socket.getOutputStream(), true); String msg2; while (true) { msg2 = re.readLine(); pw.println(msg2); } }catch (Exception e) { e.printStackTrace(); } } } }

Server.java:

//我的github:https://github.com/ygj0930 //我的博客:http://www.cnblogs.com/ygj0930/ import java.net.*; import java.io.*; import java.util.*; public class Server { int port; List<Socket> clients; ServerSocket server; public static void main(String[] args) { new Server(); } public Server() { try{ port=8080; clients=new ArrayList<Socket>(); server=new ServerSocket(port); while(true) { Socket socket=server.accept(); clients.add(socket); Mythread mythread=new Mythread(socket); mythread.start(); } }catch(Exception ex) { } } class Mythread extends Thread { Socket ssocket; private BufferedReader br; private PrintWriter pw; public String msg; public Mythread(Socket s) { ssocket=s; } public void run() { try{ br = new BufferedReader(new InputStreamReader(ssocket.getInputStream())); msg = "欢迎【" + ssocket.getInetAddress() + "】进入聊天室!当前聊天室有【" + clients.size() + "】人"; sendMsg(); while ((msg = br.readLine()) != null) { msg = "【" + ssocket.getInetAddress() + "】说:" + msg; sendMsg(); } }catch(Exception ex) { } } public void sendMsg() { try{ System.out.println(msg); for(int i = clients.size() - 1; i >= 0; i--) { pw=new PrintWriter(clients.get(i).getOutputStream(),true); pw.println(msg); pw.flush(); } }catch(Exception ex) { } } } }

转载请注明原文地址: https://www.6miu.com/read-2614484.html

最新回复(0)