12.udp

embedded/2025/1/31 21:48:01/

12.udp

      • **1. UDP特性**
      • **2. UDP编程框架(C/S模式)**
      • **3. UDP发送接收函数**
      • **4. UDP编程练习**

1. UDP特性

  • 连接特性:无链接,通信前无需像TCP那样建立连接。
  • 可靠性:不可靠,不保证数据按序到达、不保证数据无丢失或重复。
  • 数据传输:适合传输大数据,但实际传输受网络MTU等因素限制。

2. UDP编程框架(C/S模式)

  • 服务器端流程
    1. 创建套接字:调用socket()函数,参数为(PF_INET,SOCK_DGRAM,0)
    2. 绑定地址:使用bind()函数,绑定服务器地址和端口,此步骤为必选。
    3. 接收数据:通过recvfrom()函数接收客户端发送的数据。
    4. 关闭套接字:通信结束后,调用close()函数关闭套接字。
  • 客户端流程
    1. 创建套接字:同样调用socket(PF_INET,SOCK_DGRAM,0)
    2. 绑定地址bind()函数为可选操作,若需要固定客户端端口则绑定。
    3. 发送数据:利用sendto()函数向服务器发送数据。
    4. 关闭套接字:完成通信后,用close()关闭套接字。

3. UDP发送接收函数

  • sendto函数
    • 功能:用于UDP协议中向对方发送数据。
    • 参数
      • sockfd:本地的套接字id。
      • buf:本地的数据存储,一般是要发送的数据。
      • len:要发送的数据长度。
      • flags:发送数据方式,0表示阻塞发送。
      • dest_addr:必选,表示要发送到的目标主机信息结构体。
      • addrlen:目标地址长度。
    • 返回值:成功返回发送的数据长度,失败返回 -1。
  • recvfrom函数
    • 功能:用于UDP协议中获取对方发送的数据。
    • 参数
      • sockfd:本地的套接字id。
      • buf:要存储数据的内存区,一般是数组或者动态内存。
      • len:要获取的数据长度,一般是buf的大小。
      • flags:获取方式,0表示阻塞。
      • src_addr:可选,表示对方的地址信息结构体,如果为NULL,表示不关心对方地址。
      • addrlen:对方地址信息结构体大小,如果src_addrNULL,则该值也为NULL
    • 返回值:成功返回接收到的数据长度,失败返回 -1。

4. UDP编程练习

  • 验证UDP无链接性质的测试程序:编写程序,在未建立类似TCP连接的情况下,实现UDP数据的发送和接收,验证UDP无需预先连接即可通信的特性。
  • 基于UDP的点对点聊天程序:利用UDP的发送和接收函数,实现两个端点之间的实时消息交互功能。
  • 基于UDP的聊天室程序
    • 注册过程:每个客户端在服务器端进行注册,服务器记录客户端信息。
    • 消息转发:服务器接收任意客户端发送的消息,并将其转发给所有在线客户端。
    • 下线通知:当任意客户端下线时,服务器负责通知其他在线用户主机。

http://www.ppmy.cn/embedded/158456.html

相关文章

SkyWalking介绍

一款开源的系统性能监控工具(APM) 背景 在解决提报的IT性能问题时,由于缺乏系统性能监控运维的工具,导致问题排查非常困难,尤其是偶发的问题,无法进行问题复现还原,需要一套能实时监控线上系统性能的工具平台。 SkyWal…

装饰SpringMVC的适配器实现响应自动包装

文章目录 1.common-tool-starter1.目录结构2.ResultWrapper.java 2.common-web-starter1.目录结构2.IgnoredResultWrapper.java 自定义注解,忽略对返回结果的自动包装3.ReturnValueHandlersDecorator.java 对适配器进行扩展的装饰器4.WebAutoConfiguration.java 将装…

参照和谐色调为PPT图形设置统一格式的要点

大家好~今天和大家聊一聊PPT设计中如何通过和谐色调为图形设置统一格式,让整体设计看起来既专业又有视觉吸引力。PPT不仅仅是一个展示工具,它更是传达信息的载体。无论是公司汇报、学术展示,还是产品推广,一个有条理、…

React 低代码项目:项目创建

Date: January 29, 2025 项目创建 思路: 使用 Create-React-App 创建 React 项目使用 Vite 创建 React 项目使用 eslint prettier husty 等,制定编码规则 创建项目 注:在这之前,推荐 node 版本:node/18.20.6 &#…

股指期货的基差套利有什么样的风险?

基差说的就是期货价格减去现货价格的那个差。如果期货价格比现货价格高,咱们就叫它升水;反过来,期货价格比现货价格低,那就是贴水。股指期货和股票现货,它们之间有个默契,那就是到了期货交割日,…

消息队列:春招面试的重要知识模块

在之前的文章中,我们深入探讨了 Redis 缓存,了解了它的数据结构、应用场景以及缓存淘汰策略,这对于提升系统性能起到了关键作用。而在现代分布式系统中,消息队列同样是不可或缺的组件。消息队列能够实现系统间的异步通信、解耦以及…

视频外绘技术总结:Be-Your-Outpainter、Follow-Your-Canvas、M3DDM

Diffusion Models专栏文章汇总:入门与实战 前言:视频Inpaint的技术很火,但是OutPaint却热度不高,这篇博客总结比较经典的几篇视频Outpaint技术。其实Outpaint在runway等工具上很火,可是学术界对此关注比较少,博主从这三年的顶会中找到了最具代表性的三篇论文解读。 目录 …

【C++】类和对象

面向对象编程 学习过C语言的小伙伴知道:C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 面向过程编程也叫结构化编程。虽然结构化编程的理念提高了程序的清晰度,可靠性&#xff0c…