这是住转载的
问:
如果在局域网内开发一文件传输程序(局域网网卡均为100M),文件被分割成N个包发送的话,使用TCP直接发送,如果我发完一个包不延时的话肯定会丢包。TCP协议不是号称能够避免丢包吗?如果本程序需要在外网上使用,也必须延时吗,那这个延时值应该设置为多少?
答:
TCP协议不是号称能够避免丢包吗?
---->是保证在传输中不丢包。
但实际上你的问题是在应用层丢了。
TCP有滑动窗口概念,你发的包太多,对方接收缓冲满了,你又不检查错误日志,盲目发,当然有问题,
-----
延时值应该设置为多少?
-----》依据你的网络情况,实际上你不要这样乱发,应该一发一收,收到响应再发下一包,这样可适应任何网络情况。
我的实践, 我增加了返回发送,但是在局域网内还是出错(5m的东西,后2m就出错)! 看过一个不算太标准的ftp服务器的源代码,在不限速的情况下也没特别的处理。
我看了好多ftp客户端源代码,并不是一发一收。看来问题的关键在Ftp服务器。我的办法也解决了此问题,详细情况见我的文章Socket创建C/S模型的小结.