recvfromrecvfrom只能接收char* 的数据???那其他类型的怎么办??

recvfrom  时间:2021-07-16  阅读:()

如何调用recvfrom函数中

struct sockaddr_in address; int address_len = sizeof(address); recvfrom(socket, buffer, length, 0, (struct sockaddr *)&address, &address_len );

send和sendto的区别

endto可以在参数中指定发送的目标地址,send需要socket已建立连接,sendto可用于无连接的socket 对于有连接的socket,两者一样,sendto最后两个参数没用

关于sendto()和recvfrom()两个函数参数的疑?

1、len是指缓冲区大小,就是第二个参数的长度。

Length of the data in buf, in bytes. 2、sendto中的是目的套接字结构的尺寸,只是标识一下to的结构所占的长度, 主要是因为弱类型char*需要长度,目标并不关心必须是否sockaddr_in结构。

指针的形式,是为了获取目标套接字地址的尺寸,也是为了能够进行弱类型解析。

协议本身是不限定必须使用sockaddr_in结构的,但是windows编程中一般都是用sockaddr_in

recvfrom函数

recvfrom函数用于从(已连接)套接口上接收数据,并捕获数据发送源的地址。

  本函数用于从(已连接)套接口上接收数据,并捕获数据发送源的地址。

  对于SOCK_STREAM类型的套接口,最多可接收缓冲区大小个数据。

如果套接口被设置为线内接收带外数据(选项为SO_OOBINLINE),且有带外数据未读入,则返回带外数据。

应用程序可通过调用ioctlsocket()的SOCATMARK命令来确定是否有带外数据待读入。

对于SOCK_STREAM类型套接口,忽略from和fromlen参数。

  对于数据报类套接口,队列中第一个数据报中的数据被解包,但最多不超过缓冲区的大小。

如果数据报大于缓冲区,那么缓冲区中只有数据报的前面部分,其他的数据都丢失了,并且recvfrom()函数返回WSAEMSGSIZE错误。

  若from非零,且套接口为SOCK_DGRAM类型,则发送数据源的地址被复制到相应的sockaddr结构中。

fromlen所指向的值初始化时为这个结构的大小,当调用返回时按实际地址所占的空间进行修改。

  如果没有数据待读,那么除非是非阻塞模式,不然的话套接口将一直等待数据的到来,此时将返回SOCKET_ERROR错误,错误代码是WSAEWOULDBLOCK。

用select()或WSAAsynSelect()可以获知何时数据到达。

  如果套接口为SOCK_STREAM类型,并且远端“优雅”地中止了连接,那么recvfrom()一个数据也不读取,立即返回。

如果立即被强制中止,那么recv()将以WSAECONNRESET错误失败返回。

哪位大神帮解决一下啊?到底哪里不对啊?recvfrom返回值总是-1.

recvfrom 返回-1表示接收数据失败,一般有两种情况会失败,当接收缓冲区小于对方发送的数据时,缓冲区无法接收这个包,recvfrom失败,另外一种,传入的参数有问题,例如socketaddrlength,或者socket句柄有问题,这些都会直接返回-1,不会有任何阻塞

recvfrom只能接收char* 的数据???那其他类型的怎么办??

计算机都是以二进制存储数据的,无论什么数据类型你都当成是2进制的不就好了 例如一个char有sizeof(char)个字节,一个int有sizeof(int)个字节,假设前者是1字节,后者是4字节,我们只要用四个前者表示一个后者不就行了 具体怎么转换可以想嘛,数据类型皆同理,其实还有更方便的转换方法,就是直接用指针强制来,例如 typdef struct {int a;char b;bool c;} Data; char * buffer = malloc(sizeof(Data)); Data d; strncpy(buffer,(char*)&d,sizeof(Data)); 举个栗子而已

打开海外主机域名商出现"Attention Required"原因和解决

最近发现一个比较怪异的事情,在访问和登录大部分国外主机商和域名商的时候都需要二次验证。常见的就是需要我们勾选判断是不是真人。以及比如在刚才要访问Namecheap检查前几天送给网友域名的账户域名是否转出的,再次登录网站的时候又需要人机验证。这里有看到"Attention Required"的提示。我们只能手工选择按钮,然后根据验证码进行选择合适的标记。这次我要选择的是船的标识,每次需要选择三个,一...

AlphaVPS(€3.99/月)VPS年付15欧,AMD EYPC+NVMe系列起

AlphaVPS是一家保加利亚本土主机商(DA International Group Ltd),提供VPS主机及独立服务器租用等,数据中心包括美国(洛杉矶/纽约)、德国、英国和保加利亚等,公司办公地点跟他们提供的保加利亚数据中心在一栋楼内,自有硬件,提供IPv4+IPv6,支持PayPal或者信用卡等方式付款。商家提供的大硬盘VPS主机,提供128GB-2TB磁盘,最低年付15欧元起,也可以选择...

RAKsmart:美国圣何塞服务器限量秒杀$30/月起;美国/韩国/日本站群服务器每月189美元起

RAKsmart怎么样?RAKsmart是一家由华人运营的国外主机商,提供的产品包括独立服务器租用和VPS等,可选数据中心包括美国加州圣何塞、洛杉矶、中国香港、韩国、日本、荷兰等国家和地区数据中心(部分自营),支持使用PayPal、支付宝等付款方式,网站可选中文网页,提供中文客服支持。本月商家继续提供每日限量秒杀服务器月付30.62美元起,除了常规服务器外,商家美国/韩国/日本站群服务器、1-10...

recvfrom为你推荐
wmiprvsewmiprvse.exe是什么进程bloomfilter电脑游戏图像设置里的Bloom是什么意思?开票系统国税承认的开票系统有哪些rdl电脑主机上的dvd+rdl是什么意思spawning急救!编好C++程序后(确认无误),再编译时总出现error spawning 是什么意思?是不是系统出了问题radius认证如何写一个C#的Radius认证客户端smartupload为什么使用smartupload执行上传保存操作时用这句smart.save("upload")失败用smart.save("/upload")成功欢迎页面欢迎屏幕!!!!layoutsubviews如何设置plus.nativeui.toast的样式数据分析报告范文数据分析报告怎么写
windows虚拟主机 如何注销域名备案 krypt enom windows主机 美元争夺战 edis 新站长网 太原联通测速平台 40g硬盘 129邮箱 亚马逊香港官网 双线asp空间 smtp服务器地址 阿里云手机官网 登陆qq空间 睿云 广州主机托管 新疆服务器 winds 更多