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

Linux系统编程:UDP和TCP

UDP(用户数据报协议)

recvfrom 函数

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen); 
  • 功能: 从指定的 UDP 套接字接收数据。
  • 参数:
    • sockfd: 套接字的文件描述符。
    • buf: 指向接收数据的缓冲区。
    • len: 缓冲区的大小。
    • flags: 接收操作的标志,通常设置为 0。
    • src_addr: 指向存储发送方地址信息的 sockaddr 结构。
    • addrlen: 指向 socklen_t 的指针,指明 src_addr 的长度。
  • 返回值:
    • 成功时返回接收到的字节数。
    • 失败时返回 -1。

TCP(传输控制协议)

客户端与服务器的基本流程

TCP 客户端

  1. 建立连接:

    • socket: 创建一个套接字。
    • bind: (可选)将套接字绑定到特定地址。
    • connect: 发起连接请求。
  2. 数据传输:

    • 使用 read 或 write 进行通信。
    • 使用 close 关闭连接。

TCP 服务器

  1. 建立连接:

    • socket: 创建一个套接字。
    • bind: 绑定到特定地址。
    • listen: 将套接字设置为监听状态。
    • accept: 接受客户端的连接请求。
  2. 数据传输:

    • 使用 read 或 write 进行通信。
    • 使用 close 关闭连接。

关键函数

connect

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 
  • 功能: 客户端向目标主机发起连接。
  • 参数:
    • sockfd: 套接字文件描述符。
    • addr: 目标主机的地址信息。
    • addrlen: 地址信息的长度。
  • 返回值:
    • 成功时返回 0。
    • 失败时返回 -1。

listen

int listen(int sockfd, int backlog); 
  • 功能: 将套接字设置为被动监听状态。
  • 参数:
    • sockfd: 套接字文件描述符。
    • backlog: 最大等待连接的数量。
  • 返回值:
    • 成功时返回 0。
    • 失败时返回 -1。

accept

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); 
  • 功能: 接受连接请求,为新连接创建一个套接字。
  • 参数:
    • sockfd: 监听套接字的文件描述符。
    • addr: 接收客户端地址数据(可为 NULL)。
    • addrlen: 地址信息的长度。
  • 返回值:
    • 成功时返回新的套接字文件描述符。
    • 失败时返回 -1。

注意事项

  • TCP 客户端可以选择省略 bind 步骤,系统会默认绑定到可用接口。
  • UDP 是无连接协议,不保证数据传输的顺序和可靠性,而 TCP 是面向连接的协议,确保数据传输的可靠性和顺序。

 


http://www.kler.cn/a/280056.html

相关文章:

  • Day16_Zookeeper
  • SCDN的优势在哪?Edge SCDN与传统SCDN有何不同?
  • 数字经济下的支付风控新策略:区块链积分系统
  • Linux 性能观测之CPU平均负载
  • Android经典实战之Kotlin的delay函数和Java中的Thread.sleep有什么不同?
  • 8.26 T4 日记和编辑器(fhq维护kmp——kmp本身含有的单射与可合并性)
  • 超详细!!!安装Android studio创建flutter项目并运行到模拟器
  • PostgreSQL死锁问题(Deadlock found when trying to get lock)如何快速定位原因及解决
  • 【区块链 + 司法存证】易保全区块链电子数据存证保全系统 | FISCO BCOS应用案例
  • Mysql基础练习题 182.编写解决方案来报告所有重复的电子邮件 (力扣)
  • 【单片机】51单片机中的`data`与`code`关键字详解
  • 【C语言】深入理解指针3(附转移表源码)
  • 大数据基础:数仓架构演变
  • c/c++基础及类和对象汇总
  • Java 入门指南:Java IO 设计模式
  • 源代码编译,Apache DolphinScheduler前后端分离部署解决方案
  • IS-IS路由原理详解
  • uniapp重新编译在微信开发者工具跳转指定页面
  • SpringBoot集成kafka-指定topic(主题)-partition(分区)-offset(偏移量)消费信息
  • 最新CSS3定位元素