C# 网络编程--关于UDP 通信(二)
UDP (User Datagram Protocol) 是一种无连接的传输层协议,主要用于支持数据报文的传输。它的主要特点包括简单、高效、不保证可靠性和顺序。
1.UDP协议基本概念
1.udp基于IP的简单的协议,不可靠的协议
2.优点:简单、 轻量化、 传输速度高、要求可靠性不太高
3.缺点:没有流量控制,没有应答确认机制。不能解决丢包重发错顺序问题
2.UDP 特点:
• 建立连接:与 TCP 不同,UDP 在发送数据前不需要建立连接。这意味着发送方可以直接向接收方发送数据报文。
• 发送数据:发送方向接收方发送数据报文时,每个数据报文都包含源端口、目的端口、长度和校验和等信息。这些信息被封装在 UDP 头部中,随后数据报文被传递给 IP 层进行发送。
• 接收数据:接收方接收到数据报文后,会检查 UDP 头部中的校验和以验证数据的完整性。如果校验和正确,接收方将数据报文传递给上层应用程序;如果校验和错误,数据报文会被丢弃。
• 无确认机制:UDP 不提供数据传输的确认机制,这意味着发送方不会收到接收方关于是否成功接收到数据的反馈。因此,UDP 不能保证数据的可靠传输。
• 无序传输:UDP 不保证数据报文的顺序,即发送方发送的数据报文可能以不同的顺序到达接收方。这要求上层应用程序自行处理数据的排序问题。
• 多播和广播:UDP 支持多播和广播通信,允许多个接收方同时接收相同的数据报文,适用于视频流媒体、在线游戏等应用场景。
3.UDP示例
UDP 服务器
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;class UdpServer
{private const int Port = 5000;private const int BufferSize = 1024;static void Main(string[] args){// 创建一个 UDP 套接字UdpClient udpClient = new UdpClient(Port);IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, Port);Console.WriteLine("UDP Server is running...");while (true){try{// 接收数据报文byte[] receivedBytes = udpClient.Receive(ref remoteEndPoint);string receivedData = Encoding.UTF8.GetString(receivedBytes);Console.WriteLine($"Received data from {remoteEndPoint}: {receivedData}");// 发送响应string responseData = "Message received!";byte[] sendBytes = Encoding.UTF8.GetBytes(responseData);udpClient.Send(sendBytes, sendBytes.Length, remoteEndPoint);}catch (Exception ex){Console.WriteLine($"Error: {ex.Message}");}}}
}
UDP 客户端
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;class UdpClientExample
{private const int Port = 5000;private const string ServerIp = "127.0.0.1";private const int BufferSize = 1024;static void Main(string[] args){// 创建一个 UDP 套接字UdpClient udpClient = new UdpClient();// 设置服务器的 IP 地址和端口IPEndPoint serverEndPoint = new IPEndPoint(IPAddress.Parse(ServerIp), Port);Console.WriteLine("UDP Client is running...");while (true){try{Console.Write("Enter message to send: ");string message = Console.ReadLine();byte[] sendBytes = Encoding.UTF8.GetBytes(message);// 发送数据报文udpClient.Send(sendBytes, sendBytes.Length, serverEndPoint);// 接收响应byte[] receivedBytes = udpClient.Receive(ref serverEndPoint);string receivedData = Encoding.UTF8.GetString(receivedBytes);Console.WriteLine($"Received response from server: {receivedData}");}catch (Exception ex){Console.WriteLine($"Error: {ex.Message}");}}}
}
4.UDP 的应用场景
以下展示 UDP 在不同应用场景中的优势,尤其是在对实时性要求较高的场景中。
1. 在线视频会议
场景描述: 在线视频会议应用(如 Zoom、Teams)通常使用 UDP 协议来传输音视频数据。
• 发送数据:发送方(例如会议主持人)的摄像头和麦克风捕获音视频数据,这些数据被编码成小的数据包,并通过 UDP 发送到接收方。
• 接收数据:接收方(例如参会者)接收到这些数据包后,解码并显示音视频内容。
• 无确认机制:由于 UDP 不提供确认机制,即使某些数据包丢失,也不会重新发送,这有助于减少延迟,保证实时性。
• 无序传输:接收方可能会接收到乱序的数据包,但视频编解码器通常能够处理这种情况,确保视频流畅播放。
2. 在线游戏
场景描述: 多人在线游戏(如《英雄联盟》、《绝地求生》)通常使用 UDP 协议来传输游戏状态数据。
• 发送数据:服务器或客户端定期发送游戏状态更新(如玩家位置、生命值等)到其他客户端。
• 接收数据:接收方客户端接收到这些状态更新后,更新本地的游戏状态。
• 无确认机制:即使某些状态更新数据包丢失,也不会影响整体游戏体验,因为后续的状态更新会覆盖之前的旧数据。
• 无序传输:游戏引擎通常能够处理乱序的数据包,确保游戏状态的准确性和实时性。
3. DNS 查询
场景描述: DNS(域名系统)查询通常使用 UDP 协议来解析域名。
• 发送数据:客户端(如浏览器)向 DNS 服务器发送一个包含域名的查询请求。
• 接收数据:DNS 服务器接收到查询请求后,查找对应的 IP 地址,并将结果返回给客户端。
• 无确认机制:如果客户端没有收到响应,它可能会重发查询请求,但不会等待确认。
• 无序传输:DNS 查询通常是一次性的,所以无序传输不是问题。
4. 多播视频流
场景描述: 多播视频流(如 IPTV)使用 UDP 协议将视频数据同时发送给多个接收方。
• 发送数据:视频服务器将视频数据包发送到一个多播地址。
• 接收数据:所有订阅了该多播地址的接收方都能接收到这些数据包。
• 无确认机制:即使某些数据包丢失,也不会重新发送,以保证视频流的实时性。
• 无序传输:接收方可能会接收到乱序的数据包,但视频编解码器通常能够处理这种情况,确保视频流畅播放。
在某些场景,为什么用UDP,而不用TCP呢?
打个比方:就拿视频来说,哪怕是某一时刻网络不好导致数据丢包了,那也影响也不大,顶多就是卡了一下或者花屏了一下,下一帧的数据包马上就顶替上一次的数据了,实际对我们来说还是可接受的,由此可说,当运用在可靠性低
、时效性
、快速
高这场景下使用最合适不过了
要是换成TCP,有可能视频会卡的很严重,无法直视,因为TCP 出现丢包了,还需要等丢的包发过来才行,这过程延迟就很高了
5.总结
UDP 提供了一种快速、简单的数据传输方式,适用于对传输速度有较高要求而对可靠性要求相对较低的应用场景。
相关文章:

C# 网络编程--关于UDP 通信(二)
UDP (User Datagram Protocol) 是一种无连接的传输层协议,主要用于支持数据报文的传输。它的主要特点包括简单、高效、不保证可靠性和顺序。 1.UDP协议基本概念 1.udp基于IP的简单的协议,不可靠的协议 2.优点:简单、 轻量化、 传输速度高、…...
【k8s集群应用】Kubernetes部署安装-二进制部署实例
文章目录 Kubernetes 部署方式常见的K8S安装部署方式Kubeadm与二进制部署的区别 Kubernetes部署安装环境配置Kubernetes集群初始化配置(实验环境)一、操作系统初始化配置二、部署Docker引擎 etcd 集群搭建配置 etcd 集群 Kubernetes Master 组件部署准备…...
js常见代码输出问题之promise,await,变量提升以及闭包(包括例子以及详细解析)
这里写目录标题 异步事件循环宏任务微任务1. 执行顺序2. 分类 Promise代码输出1. promise.then执行时机2. 宏任务微任务的多轮次3. .then .catch会返回新的promise4. 返回任意一个非 promise 的值都会被包裹成 promise 对象5. .then .catch 的值不能是promise本身6. 值透传7. .…...

遗传算法与深度学习实战(27)——进化卷积神经网络
遗传算法与深度学习实战(27)——进化卷积神经网络 0. 前言1. 自定义交叉算子2. 自定义突变操作符3. 进化卷积神经网络小结系列链接 0. 前言 DEAP toolbox 中提供的标准遗传操作符对于自定义的网络架构基因序列来说是不够的。这是因为任何标准的交叉算子…...

【Vue3】前端使用 FFmpeg.wasm 完成用户视频录制,并对视频进行压缩处理
强烈推荐这篇博客!非常全面的一篇文章,本文是对该博客的简要概括和补充,在不同技术栈中提供一种可行思路,可先阅读该篇文章再阅读本篇: FFmpeg——在Vue项目中使用FFmpeg(安装、配置、使用、SharedArrayBu…...

基础算法——前缀和
由于比赛基本都是采用Dev-C所以,算法篇基本都是采用Dev-C来解释(版本5.11,c11) 首先介绍一下前缀和算法 给定一个数组,有q次询问,每次询问: 两个整数l,r,求出数组 l 到 r的结果 遇…...

spring实例化对象的几种方式(使用XML配置文件)
前言 Spring框架作为一个轻量级的控制反转(IoC)容器,为开发者提供了多种对象实例化的策略。通过这些策略,开发者可以更加灵活地控制对象的生命周期和依赖关系。无论是通过XML配置、注解配置还是Java配置,Spring都能…...

【二叉树】力扣 129.求根节点到叶子节点数字之和
一、题目 二、思路 每找到一个非空节点,之前路径上的所有节点的数量级都要增加1个单位。例如,当前节点为3,之前的节点路径为1 -> 2,presum 1 * 10 2 12,现在路径变为了 1 -> 2 -> 3,sum pres…...

深度学习物体检测之YOLOV5源码解读
V5比前面版本偏工程化,项目化,更贴合实战 一.V5版本项目配置 (1)整体项目概述 首先github直接查找yolov5,下载下来即可。在训练时,数据是怎么处理的?网络模型架构是怎么设计的(如各层的设计)?yolov5要求是大于python3.8与大于等…...
音频数据采样入门详解 - 给Python初学者的简单解释
音频数据采样入门详解 - 给Python初学者的简单解释 声音是如何变成数字的?什么是采样率?为什么要懂这个?Python小例子总结 大家好!今天我们来聊一个有趣的话题:音频数据是如何在计算机中处理的。让我用最简单的方式来解…...

Unity类银河战士恶魔城学习总结(P179 Enemy Archer 弓箭手)
教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了敌人弓箭手的制作 Enemy_Archer.cs 核心功能 状态机管理敌人的行为 定义了多个状态对象(如 idleState、moveState、attackState 等),通过状态机管理敌人的…...

SpringCloud集成sleuth和zipkin实现微服务链路追踪
文章目录 前言技术积累spring cloud sleuth介绍zipkin介绍Zipkin与Sleuth的协作 SpringCloud多模块搭建Zipkin Server部署docker pull 镜像启动zipkin server SpringCloud 接入 Sleuth 与 Zipkinpom引入依赖 (springboot2.6)appilication.yml配置修改增加测试链路代码 调用微服…...

Python随机抽取Excel数据并在处理后整合为一个文件
本文介绍基于Python语言,针对一个文件夹下大量的Excel表格文件,基于其中每一个文件,随机从其中选取一部分数据,并将全部文件中随机获取的数据合并为一个新的Excel表格文件的方法。 首先,我们来明确一下本文的具体需求。…...

Linux+Docker onlyoffice 启用 HTTPS 端口支持
文章目录 一、需求二、配置2.1 创建容器2.2 进入容器2.3 生成私钥和证书 2.4 测试访问 一、需求 上篇文章介绍了如何搭建一个 onlyoffice 在线预览服务,但是我们实际场景调用该服务的网站是协议是 https 的 ,但是 onlyoffice 服务还没做配置,…...

在 Visual Studio Code 中编译、调试和执行 Makefile 工程 llama2.c
在 Visual Studio Code 中编译、调试和执行 Makefile 工程 llama2.c 1. Installing the extension (在 Visual Studio Code 中安装插件)1.1. Extensions for Visual Studio Code1.2. C/C1.2.1. Pre-requisites 1.3. Makefile Tools 2. Configuring your project (配置项目)2.1.…...
python中math模块常用函数
文章目录 math模块简介各种三角函数反三角函数取整函数欧几里得距离绝对值最大公约数开根号幂阶乘函数 math模块简介 math模块是python标准库的一部分,提供了对于浮点数相关的数学运算,下面是常用的一些function 各种三角函数反三角函数 math.cos、ma…...
优化 Vue 3 开发体验:配置 Vite 使用 WebStorm 作为 Vue DevTools 的默认编辑器
优化 Vue 3 开发体验:配置 Vite 使用 WebStorm 替代 VS Code 作为 Vue DevTools 的默认编辑器 在 Vue 3 项目开发中,合理配置开发工具可以大大提升我们的工作效率。本文将介绍如何配置 Vite,使其在使用 Vue DevTools 时将默认编辑器从 VS Co…...

【C语言练习(9)—有一个正整数,求是几位数然后逆序打印】
C语言练习(9) 文章目录 C语言练习(9)前言题目题目解析结果总结 前言 主要到整数的取余(%)和整数的取商(/),判断语句if…else if …else的使用 题目 给一个不多于3位的正整数,要求:一、求它是几位数&…...
热敏打印机的控制
首次接触热敏打印机,本来没有特别之处,花了大概十天时间完成一款猫学王热敏打印机,给到客户体验后,客户反馈说打字看起来不明显,打印照片有条纹,所以引起了我对于他的关注,几点不足之处需要优化…...

【closerAI ComfyUI】电商赋能,AI模特套图生产,各种姿势自定义,高度保持人物服饰场景一致性,摆拍街拍专用
closerAIGCcloserAI,一个深入探索前沿人工智能与AIGC领域的资讯平台,我们旨在让AIGC渗入我们的工作与生活中,让我们一起探索AIGC的无限可能性!aigc.douyoubuy.cn 【closerAI ComfyUI】电商赋能,AI模特套图生产,各种姿势自定义,高度保持人物服饰场景一致性,摆拍街拍专用…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

快速排序算法改进:随机快排-荷兰国旗划分详解
随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...