用udp来传送文件,发送端sendto加上了 sleep(100)。 接受端recvfrom 用for循环,
但每次都只能收到前8个数据包。抓包看过,发送端全部包都发出来了,接收端只对前8个数据包相应了。对照书本例子,都差不多啊。很郁闷,想了一天了。小弟初学,较少,见谅了。...
但每次都只能收到前8个数据包。抓包看过,发送端全部包都发出来了,接收端只对前8个数据包相应了。
对照书本例子,都差不多啊。很郁闷,想了一天了。
小弟初学,较少,见谅了。 展开
对照书本例子,都差不多啊。很郁闷,想了一天了。
小弟初学,较少,见谅了。 展开
3个回答
展开全部
有一种可能是,你发的前8包把接收端的socket缓存占完了,后面到来的包放不下全被丢弃了。
建议的调试方法:
1.增加接收端的套接字的buffer缓存。
2.发送端每次发的包小一点。
3.发送端sleep时间长一点,比如1秒。
建议的调试方法:
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就会满,后面的数据就会被丢掉。
展开全部
能否把代码贴出来,如果你每次都收到8个数据包,估计时你的程序又问题,至于socket缓存的问题,这个基本上不用考虑,只要你读取数据,此时数据就从socket缓存中出来了,当socket缓存不足的时候,数据会重复覆盖,这就时所谓的丢包问题。另外如果网卡没有收到数据也会产生丢包
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询