联合早报 - 享誉新加坡与国际的权威中文新闻媒体

查看: 108|回复: 0

recvfrom(关于recvfrom的介绍)

[复制链接]

7万

主题

0

回帖

23万

积分

论坛元老

Rank: 8Rank: 8

积分
230490
发表于 2025-8-7 18:56 | 显示全部楼层 |阅读模式
`recvfrom()`是套接字编程中的一个函数,主要用于从套接字接收数据。这个函数在UDP(用户数据报协议)和RAW套接字中使用得更多,因为在TCP(传输控制协议)中,通常使用`recv()`或`recvmsg()`来 […]                                
                                `recvfrom()`是套接字编程中的一个函数,主要用于从套接字接收数据。这个函数在UDP(用户数据报协议)和RAW套接字中使用得更多,因为在TCP(传输控制协议)中,通常使用`recv()`或`recvmsg()`来接收数据。
`recvfrom()`的原型如下:
```c
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
                 struct sockaddr *src_addr, socklen_t *addrlen);
```
参数解释如下:
- `sockfd`:这是已连接或未连接的套接字描述符。
- `buf`:指向缓冲区的指针,用于存储接收到的数据。
- `len`:指定缓冲区的大小。
- `flags`:可以设置一些选项,如`MSG_PEEK`(查看但不删除数据),`MSG_DONTWAIT`(非阻塞模式)等。
- `src_addr`:如果需要知道数据来自哪个地址,可以提供一个指向`sockaddr`结构体的指针。函数会将发送方的地址信息填入这个结构体。
- `addrlen`:指向一个`socklen_t`类型的变量,初始时应设为`sizeof(struct sockaddr)`,函数调用后,它会被更新为实际填充到`src_addr`的地址长度。
`recvfrom()`返回值是接收到的字节数,如果出错则返回-1,并设置`errno`。
这个函数的主要用途是在无连接的UDP通信中,因为UDP是无状态的,每次发送数据都需要指定目标地址,所以接收端也需要知道数据来自哪里。而在TCP中,由于已经建立了连接,接收端不需要知道数据来源,因此通常使用`recv()`。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|联合早报 - 享誉新加坡与国际的权威中文新闻媒体  

GMT+8, 2025-10-4 18:04 , Processed in 3.875607 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表