首页 > 代码库 > java 25 - 5 网络编程之多线程实现聊天室
java 25 - 5 网络编程之多线程实现聊天室
平时聊天都是在同一个窗口的,所以,这个窗口同时实现发送数据和接收数据,这时就需要多线程实现。
建立一个类:
把聊天的发送端和接收端放在同一个类,启动一个窗口
1 public class CharRoom { 2 3 public static void main(String[] args) throws IOException { 4 5 //创建socket发送对象和接收对象 6 DatagramSocket send = new DatagramSocket(); 7 DatagramSocket receive = new DatagramSocket(10010); 8 9 //用多线程同时运行2个10 SendThread st = new SendThread(send);11 ReceiveThread rt = new ReceiveThread(receive);12 13 Thread stThread = new Thread(st);14 Thread rtThread = new Thread(rt);15 16 //启动线程17 stThread.start();18 rtThread.start();19 20 21 }
再建立发送类:
1 public class SendThread implements Runnable { 2 3 // 构造传参 4 private DatagramSocket ds; 5 6 public SendThread(DatagramSocket ds) { 7 this.ds = ds; 8 } 9 10 public void run() {11 12 try {13 14 // 键盘输入的内容,进行数据打包15 // 创建键盘输入对象,IO流16 BufferedReader br = new BufferedReader(new InputStreamReader(17 System.in));18 // 读取输入的数据19 String line = null;20 while ((line = br.readLine()) != null) {21 // 设定退出条件22 if (line.endsWith("886")) {23 break;24 }25 26 // String转换成byte,打包27 byte[] bys = line.getBytes();28 // 发送数据29 DatagramPacket dp = new DatagramPacket(bys, bys.length,30 InetAddress.getByName("172.19.xx.xxx"), 10010);31 32 ds.send(dp);33 34 }35 // 释放资源36 ds.close();37 38 }39 // 处理异常40 catch (IOException e) {41 e.printStackTrace();42 }43 }44 }
接收端:(要一直启动,所以无需释放资源)
1 public class ReceiveThread implements Runnable { 2 3 // 构造方法接收 4 private DatagramSocket ds; 5 6 public ReceiveThread(DatagramSocket ds) { 7 this.ds = ds; 8 } 9 10 // 接收数据11 public void run() {12 13 try {14 // 接收端一直启动15 while (true) {16 // 创建数据包17 byte[] bys = new byte[1000];18 DatagramPacket dp = new DatagramPacket(bys, bys.length);19 20 // 接收数据包21 ds.receive(dp);22 23 // 解析数据包24 String result = new String(dp.getData(), 0, dp.getLength());25 // 获取发送端的机器名称26 String name = dp.getAddress().getHostName();27 28 // 打印到控制台29 System.out.println("从" + name + "发送: " + result);30 }31 }32 // 处理异常33 catch (IOException e) {34 e.printStackTrace();35 }36 37 }38 }
根据这些,建立GUI,再加优化,就可以做一个聊天室
java 25 - 5 网络编程之多线程实现聊天室
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。