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. 数据传输:

    • 使用 readwrite 进行通信。
    • 使用 close 关闭连接。

TCP 服务器

  1. 建立连接:

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

    • 使用 readwrite 进行通信。
    • 使用 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 是面向连接的协议,确保数据传输的可靠性和顺序。
相关推荐
wdfk_prog1 小时前
[Linux]学习笔记系列 -- [drivers][input]input
linux·笔记·学习
盟接之桥2 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
忆~遂愿2 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
湘-枫叶情缘2 小时前
1990:种下那棵不落叶的树-第6集 圆明园的对话
linux·系统架构
Fcy6483 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满3 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠3 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Gary Studio4 小时前
rk芯片驱动编写
linux·学习
mango_mangojuice4 小时前
Linux学习笔记(make/Makefile)1.23
java·linux·前端·笔记·学习
Harvey9034 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s