【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架构师技术进阶路线图
