您现在的位置是:首页» windows系统» 非阻塞模式recv使用技巧,recv与recvfrom的区别

非阻塞模式recv使用技巧,recv与recvfrom的区别

2023-10-15 00:47:04
今天小编为大家分享Windows系统下载、Windows系统教程、windows相关应用程序的文章,希望能够帮助到大家!1. recvfrom函数的作用: recvfrom函数是用于接收数据的网络socket API函数,该函数用于从网络套接字指定的来源地址上接收数据,它也可以用来从UDP服务器接收数据。 2. r

今天小编为大家分享Windows系统下载、Windows系统教程、windows相关应用程序的文章,希望能够帮助到大家!

1. recvfrom函数的作用:

recvfrom函数是用于接收数据的网络socket API函数,该函数用于从网络套接字指定的来源地址上接收数据,它也可以用来从UDP服务器接收数据。

2. recvfrom函数的用法:

* 原型:

quad recvfrom(SOCKET s,char *buf,int len,int flags,struct sockaddr *from,int *fromlen);

* 参数介绍:

s:用于接收数据的套接字;

buf:接收缓冲区地址,从中可以存入接收到的数据;

len:指定buf的长度,以字节为单位;

flags:可以是0,或者是MSG_OOB,MSG_PEEK,MSG_WAITALL,MSG_DONTROUTE 等等,具体由不同操作系统决定;

from:指针变量,由它来接受发送端的IP地址和端口号,如果不需要此信息可设置为NULL;

fromlen:用来收取from的结构体长度,此变量必须有正确的值,否则接收不正确;

* 返回值:

若成功则返回接收到字节数,否则返回SOCKET_ERROR

* 用例介绍:

利用recvfrom进行UDP报文接收可以实现以下步骤:

1) 创建一个Socket,同时将其绑定到UDP端口上;

2) 通过Socket接收数据;

3) 从Socket收取Sender的地址;

4) 将收到的数据存到缓冲区中;

5) 关闭Socket。

1. recvfrom函数:recvfrom函数是一个接收数据的函数,它从网络套接字读取新可用的数据。它可以用来接收从另一台计算机发送到本地的数据,该函数有以下格式:

int recvfrom(SOCKET s, char* buf, int len, int flags, struct sockaddr* from, int* fromlen);

2. 函数说明:recvfrom函数从在s上已连接的客户端读取消息,并将消息存储到buf中,其中buf的大小由len参数的值决定,flags用来指定消息的发送方式,from和fromlen分别接收消息发送者地址的信息,fromlen参数首先被用来传递from的长度,函数返回收到的字节数。

3. 返回值:recvfrom函数返回接收到的字节数,如果收到的字节数为UINT_MAX,则代表失败;如果收到0字节,则代表服务器端断开连接;如果收到WSAEMSGSIZE错误,则代表缓冲区太小;如果收到SOCKET_ERROR,则有可能是因为到达接收端口的数据过多或者实现WSAAsyncSelect的时候没有初始化系统。

4. 使用实例:

//例子

sockaddr_in from;

from.sin_family=AF_INET;

from.sin_addr.s_addr=INADDR_ANY;

from.sin_port=htons(80);

int len = sizeof(from);

char buf[10];

int ret= recvfrom(s, buf, 10, 0, (struct sockaddr *)&from, &len);

if (ret == -1){

//接收失败

}

else if (ret == 0){

//对方关闭连接

}

else{

//成功收到数据

}

如上可以看到,函数recvfrom的使用原理其实就是创建一个结构体用来存储接收数据的信息,最后再把结构体传递到recvfrom函数中,当函数返回时,可以确认收到的消息的大小以及消息的发送方的地址等信息。

5. 适用范围:recvfrom函数适用于收发双方都是服务器或IP类型的udp网络传输。通常来说,收发双方都是服务器时,recvfrom函数用于检测收到的数据,并根据不同的IP地址和端口号将数据发送到不同的计算机上。此外,udp网络中,由于协议不需要保持连接,recvfrom函数用于检测接收到的数据,并将数据发送到指定的IP地址和端口号。

6. 优点:recvfrom函数的主要优点是不需要建立连接就可以进行数据传输,它在udp网络传输过程中非常有用,它也不消耗传输带宽和消耗处理器的资源,对于对实时性要求不高的程序,它可以非常有效地传输数据。

7. 缺点:udp网络中,发送方并不能确保收到的数据会被正确的接收方收到,所以收到的数据可能会有丢失或重复,因此在使用recvfrom函数时,一定要对收到的数据进行正确性检测,并采取相应的处理措施,以确保数据传输的可一致性。

wWw.Xtw.com.Cn系统网专业应用软件下载教程,免费windows10系统,win11,办公软件,OA办公系统,OA软件,办公自动化软件,开源系统,移动办公软件等信息,解决一体化的办公方案。

免责声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。内容仅供参考使用,不准确地方联系删除处理!

联系邮箱:773537036@qq.com