毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> linux >> 正文

TCP接受数据长度大于接受设置的最大长度时怎么办?

更新时间:2012-10-18:  来源:毕业论文

我的TCP服务器接受数据长度最大设置1500 接受的buffer也是1500 但是当来的网络上来的数据大于1500(也就是recv返回的长度是1500)的时候 我发现数据有丢失 这是什么原因了?
 
当我都设置成15000数据才没有丢失 因为这个时候没有一次性来的数据是超过15000的

还有即使我把接受数据的buffer设置的很大比如15000,接受最大长度还是1500 依然当网络上来的数据大于1500的时候会发现有数据丢失,
 
总之:我发现只要一次性来的数据大于最大长度就会 有丢失数据的情况

求各位大神解答疑惑 感激不尽!
 
缓冲区固定长度1500, 循环读.

每次循环读到的机械厂35/366KV总降压变电所设计数据, 插入chunk list,也就是将数据的副本插入到链表中。

这要是人家发100G, 你还得开个100G的buffer吗。。。 要学会循环。。

TCP协议是有流量控制的。所以不存在说你接收的太慢,而导致数据丢失。
流量控制是用的发送窗口控制的,发送窗口是接收方回复ACK时附带的其接收缓冲区剩余空间的大小,所以发送方发送的数据不可能使接收方接收缓冲区溢出!!
即使你1byte,1byte的读取也没关系,,接收缓冲区满了后,发送方就会自己停止发送了(这里指此TCP连接从网卡发送的数据),不是指应用程序停止使用send。发送方的发送缓中满了后,则发送方应用程序send会失败。

综合LZ的描述,这个不是接收缓冲和buffer的问题,而是发送方的应用程序有问题,比如一直调用send,却不检查send的返回值,返回-1也不等待sockfd可写,然后重新send..
大概是这样。不知道我讲明白了吗?

TCP是可靠的协议,带流量控制的功能的。
TCP协议是有流量控制的。所以不存在说你接收的太慢,而导致数据丢失。
流量控制是用的发送窗口控制的,发送窗口是接收方回复ACK时附带的其接收缓冲区剩余空间的大小,所以发送方发送的数据不可能使接收方接收缓冲区溢出!!
即使你1byte,1byte的读取也没关系,,接收缓冲区满了后,发送方就会自己停止发送了(这里指此TCP连接从网卡发送的数据),不是指应用程序停止使用send。发送方的发送缓中满了后,则发送方应用程序send会失败。

综合LZ的描述,这个不是接收缓冲和buffer的问题,而是发送方的应用程序有问题,比如一直调用send,却不检查send的返回值,返回-1,也不等待sockfd可写,然后重新send..
大概是这样。不知道我讲明白了吗?

[1] [2] 下一页

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。