用udp来传送文件,发送端sendto加上了 sleep(100)。 接受端recvfrom 用for循环,

但每次都只能收到前8个数据包。抓包看过,发送端全部包都发出来了,接收端只对前8个数据包相应了。对照书本例子,都差不多啊。很郁闷,想了一天了。小弟初学,较少,见谅了。... 但每次都只能收到前8个数据包。抓包看过,发送端全部包都发出来了,接收端只对前8个数据包相应了。
对照书本例子,都差不多啊。很郁闷,想了一天了。
小弟初学,较少,见谅了。
展开
 我来答
百度网友edc520b00
2011-04-02
知道答主
回答量:3
采纳率:0%
帮助的人:2.6万
展开全部
有一种可能是,你发的前8包把接收端的socket缓存占完了,后面到来的包放不下全被丢弃了。
建议的调试方法:
1.增加接收端的套接字的buffer缓存。
2.发送端每次发的包小一点。
3.发送端sleep时间长一点,比如1秒。
追问
1。发送端是把文件分成1024字节来传的,接收端buff设的1047字节。是大于的,没有问题吧?
2。数据包1024不会大的。
3。sleep时间,我一步一步的调试,中间应该时间很长了吧,还是只能收前八个数据包。
有人说实验过sleep(20)就行,我都100还是不行。
4。如果只是收发速度不一致,应该是部分丢失吧,也不能每次都是只收前8个包啊,后面的包一个都收不到?
请指教。
追答
1. 我说的是接收端的SOCKET的buffer,不是自己定义的recvfrom中用的buffer。你可以百度一下相关的资料。
2.1024字节一个包的,确实不算大。
3.你看一下你所用语言中sleep的时间单位,设置成1秒试一下。
4.UDP中,如果接收端的SOCKET的系统buffer满了,后面到来的包会被丢掉的。而你调用recvfrom只是从SOCKET的系统buffer 取到你的1047 buff里面而已,如果你取数据过慢,那个SOCKET的系统buffer就会满,后面的数据就会被丢掉。
百度网友212f563ef
2011-04-09 · TA获得超过938个赞
知道小有建树答主
回答量:412
采纳率:0%
帮助的人:316万
展开全部
能否把代码贴出来,如果你每次都收到8个数据包,估计时你的程序又问题,至于socket缓存的问题,这个基本上不用考虑,只要你读取数据,此时数据就从socket缓存中出来了,当socket缓存不足的时候,数据会重复覆盖,这就时所谓的丢包问题。另外如果网卡没有收到数据也会产生丢包
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友0423fb964
2011-04-04
知道答主
回答量:28
采纳率:0%
帮助的人:10.4万
展开全部
一楼说的不错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式