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

12.udp

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的聊天室程序
    • 注册过程:每个客户端在服务器端进行注册,服务器记录客户端信息。
    • 消息转发:服务器接收任意客户端发送的消息,并将其转发给所有在线客户端。
    • 下线通知:当任意客户端下线时,服务器负责通知其他在线用户主机。
原文地址:https://blog.csdn.net/qq_61673857/article/details/145399095
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/525796.html

相关文章:

  • 完整解读:从DeepSeek Janus到Janus-Pro!
  • 天融信 NGFW2.3 mibs
  • 书生大模型实战营4
  • SpringBoot 基础(Spring)
  • AI 计算的未来:Deepseek从中心化到去中心化的变革
  • c++:vector
  • 【Linux系统】进程间通信:认识命名管道
  • windows10 配置使用json server作为图片服务器
  • 笔记:使用ST-LINK烧录STM32程序怎么样最方便?
  • 设计模式Python版 适配器模式
  • Vue.js 响应式引用与响应式数据(`ref` 和 `reactive`)
  • 【Python】深入探索Python元类:动态生成类与对象的艺术
  • 深入解析JPA中的多对多关系映射
  • Java---猜数字游戏
  • wordpress每隔24小时 随机推荐一个指定分类下的置顶内容。
  • 【Elasticsearch 】自定义分词器
  • Pyside6(PyQT5)的QSqlQueryModel的常用方法
  • 【C语言】main函数解析
  • 上位机知识篇---GitGitHub
  • 在MIMIC IV数据库的derived中有bg、chemistry和vitalsign,它们都有Glucose指标,如何区分?