Java | UDP协议

news/2023/12/3 23:11:59

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

文章目录

  • 🌴前言
  • 🌴一、TCP/IP参考模型
  • 🌴二、UDP协议
    • 1. 概念
    • 2. 发送数据
    • 3.接收数据
    • 5.运行结果
  • 🌴总结


🌴前言

本文内容是关于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();//数据打包DatagramPacketString 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();}
}

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();}
}

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

5.运行结果

在这里插入图片描述


🌴总结

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



https://www.jiucaihua.cn/news/show-5071420.html

相关文章

许可分析 license分析 第十一章

许可分析是指对软件许可证进行详细的分析和评估,以了解组织内部对软件许可的需求和使用情况。通过许可分析,可以帮助组织更好地管理和优化软件许可证的使用。以下是一些可能的许可分析方法和步骤: 软件许可证监管合规性:严格遵守软…

Redis集群总结

Redis,作为一款开源的、内存中的数据结构存储系统,以其出色的性能和丰富的数据结构在业界赢得了广泛的认可。然而,当我们面临大量数据和高并发请求时,单个 Redis 实例可能无法满足我们的需求。这时,我们就需要使用到 R…

[NLP] LLM---<训练中文LLama2(五)>对SFT后的LLama2进行DPO训练

简介 大型语言模型(LLM)使 NLP 中微调模型的过程变得更加复杂。最初,当 ChatGPT 等模型首次出现时,最主要的方法是先训练奖励模型,然后优化 LLM 策略。从人类反馈中强化学习(RLHF)极大地推动了…

openGauss学习笔记-72 openGauss 数据库管理-创建和管理分区表

文章目录 openGauss学习笔记-72 openGauss 数据库管理-创建和管理分区表72.1 背景信息72.2 操作步骤72.2.1 使用默认表空间72.2.1.1 创建分区表(假设用户已创建tpcds schema)72.2.1.2 插入数据72.2.1.3 修改分区表行迁移属性72.2.1.4 删除分区72.2.1.5 增…

RHCSA 重定向、vim练习题

1.重定向练习题 (1)新建一个文件redirect.txt,并在其中写入20210804RHCSA,保存并退出 先输入命令 [rootlocalhost ~]# vim redirect.txt进入vim编辑器后,按快捷键“i”进入编辑模式,再写入数据,写完之后按“esc"键退出编辑…

【多线程案例】定时器

1. 定时器是什么? 定时器也是软件开发中的一个重要组件. 类似于一个 "闹钟". 达到一个设定的时间之后, 就执行某个指定好的代码. 定时器是一种实际开发中非常常用的组件. 比如网络通信中, 如果对方 500ms 内没有返回数据, 则断开连接尝试重连. 比如一个 …

Day43:VUEX

1. 基本介绍 这里介绍的VueX是匹配Vue3的V4版本,它绝大多数功能使用都和之前基本保持一致。 1.1 官方定义 先一起看一下官网对于VueX的定义: Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 库。它采用集中式存储管理应用的所有组件的状态&…

负载均衡原理及应用

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

Leetcode168. Excel表列名称

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题解: 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 代码如下: class Solution {public String convertToTitle(int columnNumber) {StringBuild…

Shell脚本编写:从零到精通

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…