UDP实现简单聊天功能

这篇博客介绍了如何利用UDP实现局域网内的简单聊天功能。通过设置两台电脑的IP地址和端口号,双方可以相互通信。文中提供了一个Java代码示例,包含了发送和接收数据的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习了UDP,你就可以实现局域网下的聊天功能,你可以用两台电脑试验一下,首先你可以打开你的热点,让两个电脑连接你的热点,这时的手机上就会出现两个电脑已连接,点开后,你可以发现两个电脑在你开启的局域网下的IP地址。

然后你将我下面的代码中的广播地址,改为对方的IP地址,

让他在他的电脑上改为你的IP地址,

然后你们各自运行后

开始输入的发送端口号,接受端口号

注意:比如你输入发送端口号5000,接受端口号6000,那么

他就应该输入发送端口号6000,接受端口号5000,就可实现通信了。(不仅仅只限于两台哦,多台电脑都可以)

如有不懂可以私信我,如果你们有更好的方法,可以在评论区发哦,请指教。

package wangluobiancheng;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;

/*
 * 聊天室功能类,类中定义了访问聊天室程序时的输出语句,以及获取输入的发送端口号,接受端口号,和实现发送功能的和接收功能的方法
 */
public class CharRoom {

    public static void main(String[] args) {
        System.out.println("欢迎您进入聊天室");
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入本程序发送端端口号");
        int sendPort = sc.nextInt();
        System.out.println("请输入本程序接受端端口号");
        int receivePort = sc.nextInt();
        System.out.println("聊天系统启动");
        new Thread(new SendTask(sendPort),"发送端任务").start();//创建一个启动new SendTask(sendPort)对象的线程,名字为发送端任务
        new Thread(new ReceiveTask(receivePort),"接受端任务").start();//创建一个启动new ReceiveTask(receivePort)对象的线程,名字为接受端任务
    }
}
/*
 * 发送数据的任务类。实现发送数据的功能,该功能需要通过一个实现了Runnable接口的类来实现,
 * 类中需要定义获取发送数据的端口号,并在实现run()方法中,编写显示接受到的数据的方法
 */
class SendTask implements Runnable{
    private int sendPort;//发数据的端口号
//    构造方法
    public SendTask(int sendPort) {
        this.sendPort = sendPort;
    }
    public void run() {
        try {
//            1.创建DatagramSocket对象
            DatagramSocket ds = new DatagramSocket();
//            2.输入要发送的数据
            Scanner sc = new Scanner(System.in);
            while(true) {
                String data = sc.nextLine();//获取键盘输入的数据
//                3.封装数据到DatagramPacket对象中
                byte[] buf = data.getBytes();
//                InetAddress.getByName("127.0.0.255"),127.0.0.255是广播地址,当前局域网下,都会收到。
//                创建一个要发送的数据包dp,DatagramPacket类似于集装箱,数据包包括发送的数据,数据的长度,接收端的IP地址和端口号
//                sendPort是接受端的端口
                DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.43.196"),sendPort);
//                4.发送数据
                ds.send(dp);
            }
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
}
/*
 * 接受数据的任务类
 */
class ReceiveTask implements Runnable{
    private int receivePort;//接受数据的端口号
    public ReceiveTask(int receivePort) {
        this.receivePort=receivePort;
    }
    public void run() {
        try {
//            1.DatagramSocket对象
            DatagramSocket ds = new DatagramSocket(receivePort);
//            2.创建DatagramPacket对象
            byte[] buf = new byte[1024];
            DatagramPacket dp = new DatagramPacket(buf,buf.length);
//            3.接受数据
            while(true) {
                ds.receive(dp);
//                4.显示接受到的数据
                String str = new String(dp.getData(),0,dp.getLength());
                System.out.println("收到"+dp.getAddress().getHostAddress()+"--发送的数据--"+str);
            }
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值