【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 类

【运行结果】

经验分享 程序员 微信小程序 职场和发展