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 客户端
-
建立连接:
socket
: 创建一个套接字。bind
: (可选)将套接字绑定到特定地址。connect
: 发起连接请求。
-
数据传输:
- 使用
read
或write
进行通信。 - 使用
close
关闭连接。
- 使用
TCP 服务器
-
建立连接:
socket
: 创建一个套接字。bind
: 绑定到特定地址。listen
: 将套接字设置为监听状态。accept
: 接受客户端的连接请求。
-
数据传输:
- 使用
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 是面向连接的协议,确保数据传输的可靠性和顺序。