首页app软件send 函数 send函数和sendto的区别

send 函数 send函数和sendto的区别

圆圆2025-07-15 11:00:32次浏览条评论

大家好,又见面了,我是你们的朋友全栈君。

在UDP通信中,sendto()函数需要在参数中指定接收方的地址/端口,而recvfrom()函数则在参数中承载发送方的地址/端口。相比之下,send()和r ecv() 函数不需要这样做,但在调用 send() 之前,必须为导入指定接收方的地址/端口(这样该函数才知道发往数据)。在调用 recv() 之前,可以为导入指定导入方的地址/端口,这样该函数就只接收指定导入方的数据据;当然,若不指定,也可以接收任意地址的数据。(这些内容在之前关于UDP通信中connect()和bind()函数的文章中有详细介绍。)

这四个函数的使用相对简单,但在某个实例中,我遇到了一个小问题。实现的功能是:UDP 服务器创建一个设备与客户端进行数据交互,连接成功后,服务器再创建一个设备与客户端进行数据交互,要求首先使用 connect()、recv() 和 send() 函数。

UDP 服务器代码:#include lt;stdio.hgt;#include lt;string.hgt;#include lt;stdlib.hgt;#include lt;sysgt;#include lt;sysgt;#include lt;netinetgt;#include lt;arpagt;#define BUFSZ 1024#define PORT 6567int main(void) { int srv_sd, cli_sd; int new_sd; int ret; struct sockaddr_in svr_addr, cli_addr; socklen_t addrlen = sizeof(struct sockaddr_in); char buf

观察程序流程,可以得出:

send()、sendto()和recv()、recvfrom()的使用

客户端发起连接给服务器,服务器接收到后创建新的设备,因此并可以导入 connect() 函数为该指定目标信息。这个目标地址信息虽然确实是客户端的地址,但客户端的目标地址却是服务器,那么服务器新的设备的目标地址不是客户端,服务器发送的数据还是自己收到。

程序的问题在客户端中出现。客户端创建了设备后,就立即指定目标(服务器)的地址信息,而该目标地址信息不是接下来数据交互的地址。因此,应该把为客户端指定目标地址的操作放在创建服务器新的设备之后返回数据到客户端。但是注意,客户端创建完成之后不能再使用 connect() 来指定目的地址信息,那么在数据给服务器时就需要使用 sendto(),接收数据时使用 recvfrom()。流程图应改为:

send()、sendto()和recv()、recvfrom()的使用

客户端代码实现为:int main(int argc, char *argv

结论:connect()、send()和recv()三个函数的搭配使用并不能说一定能代替sendto()和recvfrom(),具体使用上述代码场景。

发布者:全栈程序员栈长,休闲请婚纱出处:https://www.php.cn/link/592f69eb8605faf19bb15d0b370cfac8原文链接:https://www.php.cn/li nk/c8377ad2a50fb65de28b11cfc628d75c

以上就是send()、sendto()和recv()、recvfrom()使用的详细内容,更多请关注乐哥常识网其他相关文章!

send()、sen
12306如何买儿童票 12306如何买儿童票?
相关内容
发表评论

游客 回复需填写必要信息