UDP服务端收发流程

UDP 收发流程

一个 UDP socket 对应:

  • 一个接收缓冲区
  • 一个发送缓冲区

收消息

  1. 客户端发数据 → 网络传输
  2. 服务端内核收到
  3. 内核把数据包放进 接收缓冲区
  4. 应用程序调用 recvfrom 从里面读出来

发消息

  1. 应用程序调用 sendto 把数据交给内核
  2. 数据先进入 发送缓冲区
  3. 内核接管,从缓冲区取出,打包发往网络

  • 收:内核 → 接收缓冲区 → 应用
  • 发:应用 → 发送缓冲区 → 内核

不管多少个客户端,共用这一对缓冲区,内核负责排队,你只管读写。

多个客户端"同时发" 会不会冲突?

不会!!!

  • 操作系统内核会维护接收缓冲区
  • 客户端 1 发 → 进缓冲区
  • 客户端 2 发 → 也进缓冲区
  • 客户端 3 发 → 还进缓冲区

说明:结合前面所说,所有客户端发的消息都在同一个缓冲区里放着。

服务端 recvfrom()一个一个取的。

可以理解成:

多个客户端同时寄信,邮局不会把信搞混,服务端一封一封收。

关键:UDP 是 "无连接" 的

服务端不需要区分 "哪个客户端",

它只关心:

  • 这是谁发的(IP: 端口)
  • 发了什么内容

所以:1 个服务端 socket = 可以处理无限个客户端

这就是 UDP 高性能、适合游戏、视频、实时消息的原因。

相关推荐
原来是猿10 小时前
网络计算器:理解序列化与反序列化(中)
linux·运维·服务器·网络·tcp/ip
知识领航员11 小时前
蘑兔AI音乐深度实测:功能拆解、实测表现与适用场景
java·c语言·c++·人工智能·python·算法·github
AOwhisky11 小时前
虚拟化技术学习笔记
linux·运维·笔记·学习·虚拟化技术
rabbit_pro12 小时前
Docker compose部署Ollama使用模型
linux·运维·docker
jf加菲猫13 小时前
第21章 Qt WebEngine
开发语言·c++·qt·ui
码农-阿杰13 小时前
深入理解 synchronized 底层实现:从 HotSpot C++ 源码看对象锁与 Monitor 机制
开发语言·c++·
Szime13 小时前
深智微IC华润微代理:MCU选型与工业控制方案推荐
c++
Irissgwe14 小时前
六、Ext系列文件系统(2.核心原理与应用)
linux·分区··inode·软硬连接·路径缓存·ext系列文件
叼烟扛炮14 小时前
C++ 知识点18 内部类
开发语言·c++·算法·内部类
汉克老师14 小时前
GESP5级C++考试语法知识(十五、分治算法(二))
c++·算法·排序算法·分治算法·gesp5级·gesp五级