【java】模拟微信聊天(网络编程)
特别提示: 1、为了实现局域网内通信,用户发消息时,是通过广播(群发)功能实现的。发消息时将目标 IP 地址设置为 127.0.0.255。(当然,也可直接用对方的 IP 地址。)
3、为了方便调试程序,我们希望能在同一台机子中同时启动两个程序,这时需要在 IDE 中执行同一程序两次,启动两个程序的运行实例。
【任务目标】
掌握网络通信中 UDP 协议的编程原理。
掌握 UDP 网络通信 DatagramPacket 和 DatagramSocket 的使用。
【实现思路】
本程序涉及到多线程,可以采用基于接口的多线程实现技术。
1、 编写发送消息的线程类 SendTask,该类的主要功能时在其 run 方法中,创建套接字对象和数据包对象,获取键盘输入的文字,然后将其发送到 127.0.0.255 地址的好友端口号。
2、 编写接收消息的线程类 ReceiveTask,该类的主要功能时在其 run 方法中,创建套接字对象和数据包对象,在指定端口号监听(接收)消息,并将其打印出来。
【实现代码】 1、 SendTask 类
2、 ReceiveTask 类
package cn.edu.gpnu.bank.cn.edu.gpnu.exp13; import java.net.DatagramPacket; import java.net.DatagramSocket; public class ReceiveTask implements Runnable{ private int receivePort;// 接收数据的端口号 public ReceiveTask(int receivePort) { this.receivePort = receivePort; } //补充构造方法 @Override public void run() { try { // 1.DatagramSocket 对象 ds DatagramSocket ds=new DatagramSocket(receivePort); // 2.创建字节数组和 DatagramPacket 对象 dp byte [] buf=new byte[1024]; DatagramPacket dp=new DatagramPacket(buf,buf.length); //补充代码 while (true) { // 3.ds 接收数据 sp ds.receive(dp); // 4.接收到的数据转化为字符串,并打印显示 String str = "【"+dp.getAddress().getHostAddress()+"】:"+new String(dp.getData(),0, dp.getLength()); System.out.println(str); } } catch (Exception e) { e.printStackTrace(); } } }
3、 Room 类
【运行结果】
上一篇:
Java架构师技术进阶路线图