UDP服务端收发流程

UDP 收发流程

一个 UDP socket 对应:

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

收消息

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

发消息

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

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

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

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

不会!!!

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

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

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

可以理解成:

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

关键:UDP 是 "无连接" 的

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

它只关心:

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

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

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

相关推荐
码匠许师傅11 分钟前
【C++三方组件】OpenCV:计算机视觉的事实标准
c++
谙弆悕博士18 分钟前
debian快速换源
linux·运维·windows·debian·下载·换源·网络问题
.道阻且长.26 分钟前
Linux基本开发工具:编译器gcc/g++
linux·运维·服务器·职场和发展
Industio_触觉智能30 分钟前
瑞芯微RK系列调试工具与量产测试手册-上|串口日志打通与JTAG兜底调试
linux·sdk·jtag·瑞芯微·调试工具·rk3576·量产调试
HideF9 小时前
Linux
linux·服务器·网络
C^h9 小时前
c++ string
开发语言·c++
听风说ml9 小时前
socket编程 【C语言】
c语言·udp·tcp·socket编程
raindayinrain10 小时前
c++高性能--原子操作,无锁编程,操作顺序
开发语言·c++·性能优化
学逆向的10 小时前
C++ 合并命名空间
开发语言·c++·网络安全
Zhao-Jichao10 小时前
VS2026 打包 C++ 程序生成 EXE,借助 Installer Project 扩展工具
开发语言·c++