猿问

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

我是向两个不同的机器发送相同的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也有断开连接这一说?

湖上湖
浏览 419回答 2
2回答

森栏

这个源码有个错误,是这个地方 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指针访问不到。

HUWWW

你看看UDP的协议是什么就知道出现你这现象这很正常了如果想不丢包,就用TCP吧
随时随地看视频慕课网APP
我要回答