• Java | UDP协议


    不爱生姜不吃醋⭐️
    如果本文有什么错误的话欢迎在评论区中指正
    与其明天开始,不如现在行动!


    🌴前言

    本文内容是关于UDP的相关知识,包括UDP概念介绍,接收数据和发送数据的Java代码编写和实现。


    🌴一、TCP/IP参考模型

    在这里插入图片描述

    🌴二、UDP协议

    1. 概念

    用户数据协议(User Datagram Protocol)。
    UDP是面向无连接通信协议,速度快,有大小限制一次最多发送64K,数据不安全,易丢失数据。(不检查链接,直接发送数据

    应用场景:网络会议、语音通话、在线视频

    2. 发送数据

    发送数据的过程可以想象成发快递:

    1. 找快递公司(创建发送端的DatagramSocket对象
    2. 打包礼物(数据打包DatagramPacket
    3. 快递公司发送包裹(发送数据
    4. 付钱走人(释放资源

    Java代码实现:

    public class SendMessageDemo {
        public static void main(String[] args) throws IOException {
            //创建发送端的DatagramSocket
            /*
            * 细节:
            * 绑定端口,以后我们就是通过这个端口往外发送
            * 空参:所有可用的端口中随机一个进行使用
            * 有参:指定端口号进行绑定
            * */
            DatagramSocket ds = new DatagramSocket();
    
            //数据打包DatagramPacket
            String str = "你好呀!";
            byte[] bytes = str.getBytes();
            InetAddress address = InetAddress.getByName("127.0.0.1");
            int port = 10086;
    
            DatagramPacket dp = new DatagramPacket(bytes, bytes.length,address,port);
    
            //发送数据
            ds.send(dp);
    
            //释放资源
            ds.close();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    3.接收数据

    接收数据的过程也可以想象成收快递:

    1. 找快递公司(创建接收端的DatagramSocket对象
    2. 接收快递(接收打包好的数据
    3. 从快递中获得礼物(解析数据包
    4. 签收走人(释放资源

    Java代码实现:

    public class ReceiveMessageDemo {
        public static void main(String[] args) throws IOException {
            //创建接收端的DatagramSocket
            /*
            * 细节:
            * 在接收的时候,一定要绑定端口
            * 而且绑定的端口一定要跟发送的端口保持一致
            * */
            DatagramSocket ds = new DatagramSocket(10086);
    
            //接收打包好的数据
            byte[] bytes = new byte[10086];
            DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
            ds.receive(dp);
    
            //解析数据包
            byte[] data = dp.getData();
            int length = dp.getLength();
            InetAddress address = dp.getAddress();
            int port = dp.getPort();
    
            System.out.println("接收到数据:"+new String(data,0,length));
            System.out.println("该数据是从"+address+"这台电脑的"+port+"这个端口发出的!");
    
            //释放资源
            ds.close();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    注意:要先运行接受数据的代码,之后再运行发送数据的代码,因为接收数据的代码中ds.receive(dp)是阻塞的,等待接收数据。

    5.运行结果

    在这里插入图片描述


    🌴总结

    文章中代码的编写使用的都是Java网络编程方面知识,多加练习熟能生巧。
    本文中若是有出现的错误请在评论区或者私信指出,我再进行改正优化,如果文章对你有所帮助,请给博主一个宝贵的三连,感谢大家😘!!!


  • 相关阅读:
    yolov7开源代码讲解--训练代码
    0001__非对称加密与 RSA 算法
    Python每日一练(牛客新题库)——第23天:内置函数
    CentOS7安装Xrdp以便Windows远程桌面连接
    Apache Flink 中作业图与执行图的深入解析
    《JAVASE系列》抽象类与接口
    PySpark的存储不同格式文件
    MySQL数据库之事物
    Power Modeling and Analysis
    crmchat安装搭建教程文档 bug问题调试
  • 原文地址:https://blog.csdn.net/weixin_54620350/article/details/132897549