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


  • 相关阅读:
    Java: 复制文件最快方法
    【面试普通人VS高手系列】谈谈你对Seata的理解
    国家数据局国考招录12人;两万字全景讲解Agent;当基座LLM公司开始转2C;「霉霉说中文」视频的3种实现方案 | ShowMeAI日报
    MySQL基础语法快速上手
    如何在公网环境下使用笔记本的Potplayer访问本地群晖webdav中的影视资源
    Qt Designer UI设计布局小结
    vue2.x 迭代更新项目去掉缓存处理
    DQL语言实例
    Spring Cloud Stream实践
    冯诺依曼体系结构与操作系统
  • 原文地址:https://blog.csdn.net/weixin_54620350/article/details/132897549