当前位置: 首页 > news >正文

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 服务还没做配置&#xff0c…...

在 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模特套图生产,各种姿势自定义,高度保持人物服饰场景一致性,摆拍街拍专用…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...

【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?

FTP&#xff08;File Transfer Protocol&#xff09;本身是一个基于 TCP 的协议&#xff0c;理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况&#xff0c;主要原因包括&#xff1a; ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...