使用UDP实现聊天功能

本文介绍了如何使用UDP协议来创建一个简单的聊天应用。在发送端,我们设置了一个发送线程来不断读取用户输入并广播到所有连接的接收端。在接收端,创建了一个接收线程,用于监听并显示接收到的聊天消息。通过这种方式,实现了基于UDP的实时通信功能。

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

发送端:


import java.io.IOException;
import java.net.*;
import java.util.Scanner;

class MySend implements Runnable {

    @Override
    public void run() {
        while (true) {
            Scanner scan = new Scanner(System.in);
            String msg = scan.next();
            DatagramSocket sendSocket = null;
            try {
                sendSocket = new DatagramSocket();
            } catch (SocketException e) {
                e.printStackTrace();
            }

            byte[] bytes = msg.getBytes();
            InetAddress inetAddress = null;
            try {
                inetAddress = InetAddress.getByName("192.168.31.126");
            } catch (UnknownHostException e) {
                e.printStackTrace();
            }
            DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, inetAddress, 5200);
            try {
                sendSocket.send(datagramPacket);
            } catch (IOException e) {
                e.printStackTrace();
            }
            //关闭
            sendSocket.close();

        }
    }

}

public class SendDemo {
    public static void main(String[] args) throws IOException {
        System.out.println("发送端");

       MySend mySend= new MySend();
       Thread thread = new Thread(mySend);
       thread.start();



    }
}

接收端:

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

class MyReceive implements Runnable{

    @Override
    public void run() {
        while (true) {
            DatagramSocket receiveSocked = null;
            try {
                receiveSocked = new DatagramSocket(5200);
            } catch (SocketException e) {
                e.printStackTrace();
            }

            // while()
            byte[] bytes = new byte[1024];
            //创建一个报文,用来接受传过来的报文
            DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);

            //接受
            try {
                receiveSocked.receive(datagramPacket);
            } catch (IOException e) {
                e.printStackTrace();
            }
            InetAddress ip = datagramPacket.getAddress();
            //返回数据缓冲区。接受到的数据一般在缓冲区
            //datagramPacket.getLength():得到报文的长度
            //datagramPacket.getData():得到报文的信息
            System.out.println(ip.getHostAddress() + "-----" + new String(datagramPacket.getData(), 0, datagramPacket.getLength()));
            receiveSocked.close();
        }
    }
}
public class ReceiveDemo {
    public static void main(String[] args) throws IOException {
        System.out.println("接收端");
        MyReceive myReceive= new MyReceive();
        Thread thread = new Thread(myReceive);
        thread.start();

    }
}
运行结果:





分析总结:


先运行接收端
此代码是发送给自己的,要与别人聊天,就把发送端的
inetAddress = InetAddress.getByName("192.168.31.126");中的ip改为别人的,把另一个人的此代码的ip改为自己的即可
群聊的话,改成广播就行,即ip的
"192.168.31.126"的126改为255,就可以实现群聊功能,
当然,要保证接收端的端口号一致,即
receiveSocked = new DatagramSocket(5200);
5200为端口号



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值