为了账号安全,请及时绑定邮箱和手机立即绑定

您好,请问在for循环中,使用sendto语句向时,发现有的时候第一次无法发出,为什么?

您好,请问在for循环中,使用sendto语句向时,发现有的时候第一次无法发出,为什么?

湖上湖 2021-11-10 11:07:19
我是向两个不同的机器发送相同的UDP包,代码如下for (i=0; i<Num; i++)::sendto(RemoteNode[i].hSocket,(char*) pSendBuf,ulSendLength,0,(struct sockaddr*) &RemoteNode[i].stLclAddr,sizeof(RemoteNode[i].stLclAddr));但是发送几万帧以后发现,有几帧数据第一个目的机器没有发送出去,而第二个目的机器却发送出去了。是因为两个sendto语句之间间隔太短吗?那为什么只有偶尔几帧才出现这种情况?还有,进行相同试验时,发现未发送出去的帧基本是同一帧,这一帧与上一帧的发送间隔通常较大,100多秒以上,而相差几百毫秒的帧却两个机器都能收到,难道UDP也有断开连接这一说?
查看完整描述

2 回答

?
森栏

TA贡献1810条经验 获得超5个赞

这个源码有个错误,是这个地方 char *buff[256];是256个指针,每个指针大小为4个字节,并且指向位置不确定,buff就是指向指针的指针,而不是指向空间的。应该为char buff[256];是256个字符空间 buff就是空间的首地址,也就指针,如果不改的话Receive( buff,256);就出错了。
=(struct MEG*)buff;
就是强制类型转换,将MEG指针 指向了 buff位置,利用MEG结构分组buff指向的内容。虽然buff是256但MEG大小之外的通过MEG指针访问不到。

查看完整回答
反对 回复 2021-11-14
?
HUWWW

TA贡献1874条经验 获得超12个赞

你看看UDP的协议是什么就知道出现你这现象这很正常了

如果想不丢包,就用TCP吧

查看完整回答
反对 回复 2021-11-14
  • 2 回答
  • 0 关注
  • 367 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信