非阻塞模式recv使用技巧,recv与recvfrom的区别
今天小编为大家分享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