recvfrom,它跟recvmsg有什么区别?

吉云

姐妹们,今天来聊聊recvfrom和recvmsg!

最近在学习网络编程,看到recvfrom和recvmsg这两个函数,感觉有点懵圈。它们都是用来接收数据的,到底有什么区别呢?今天就来给大家讲讲我的理解,希望对大家有所帮助!

recvfrom,它跟recvmsg有什么区别?

recvfrom和recvmsg都是用来接收数据的函数,但它们有一些细微的差别。

1. recvfrom函数

recvfrom函数用于从套接字接收数据,并可以获取发送数据的源地址。它一般用于 UDP 通信,因为 UDP 是无连接的,需要通过源地址来识别发送数据的节点。

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: 标志位,用于控制接收行为

src_addr: 用于存放源地址的结构体指针

addrlen: 用于存放源地址长度的指针

2. recvmsg函数

recvmsg函数也是用来接收数据的,它与recvfrom函数的主要区别在于它支持接收多种类型的消息,包括数据、控制信息、辅助数据等。它一般用于 TCP 通信,因为 TCP 是面向连接的,接收到的数据不需要额外的信息来识别发送端。

recvmsg函数的原型如下:

c

ssize_t recvmsg(int sockfd, struct msghdr msg, int flags);

参数解释:

sockfd: 套接字描述符

msg: 用于存放接收数据的结构体指针,包含数据缓冲区、控制信息、辅助数据等

flags: 标志位,用于控制接收行为

3. 总结

简单来说,recvfrom函数更适合用于接收 UDP 数据,而recvmsg函数更适合用于接收 TCP 数据。

举个例子:

想象一下,你和你的闺蜜在网上聊天,你收到了她的消息。

如果你们使用的是微信,相当于使用的是 TCP 连接,你只需要关注消息内容,不需要知道消息来自哪个手机。此时,使用recvmsg函数即可。

如果你们使用的是 QQ,相当于使用的是 UDP 连接,你需要知道消息来自哪个 QQ 号码,才能确定是你的闺蜜发的。此时,使用recvfrom函数就能获取到源地址信息。

希望我的分享能帮助到大家理解recvfrom和recvmsg的区别!

你平时会使用哪种网络通信方式呢? 🤔 欢迎在评论区分享你的想法!

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]