首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

一个奇怪的有关问题请教各位大侠,tcp协议也有丢包的吗?该如何解决

2012-04-25 
一个奇怪的问题请问各位大侠,tcp协议也有丢包的吗?该怎么解决?我用vb实现的一套系统,用的winsock数组实现

一个奇怪的问题请问各位大侠,tcp协议也有丢包的吗?该怎么解决?
我用vb实现的一套系统,用的winsock数组实现多用户。问题是服务器发出的信息客户端偶尔会出现收不到的情况,此时网络是通的,客户端连接没有失败,服务器也能被其他客户端连接上。我搜索了一些资料说是tcp协议不会丢包的只可能出现粘包,但我看了日志信息,确实是有服务器发出的信息客户端没有收到,粘包问题倒是没出现。不知道有没有哪位高手遇到过这个问题,请赐教

[解决办法]
影子啊!好久不见,嘿嘿.

话说,TCP协议本身当然不会丢包,但是包不是丢在网络传输层的哦.

我的推测是,封包收到后,会有一个从内核到用户层的过程,而用户层有个缓冲区,数据在未被处理前是放在缓冲区里的.

如果处理数据的过程耗时太长,导致缓冲区满了,那新的数据进来会不会就把最旧的数据"顶"出去了呢?

又或者直接不接收新的数据?

以前帮别人改过一个网络聊天软件就是这样,客户端数量增加到一定程度时,就开始丢包,但协议也是TCP.

看代码后才知道,他把所有处理过程是写在DataArrival事件里的,而且服务器端要判断很多的东西,还要查询数据库,这就导致数据多了时DataArrival事件执行时间过长不返回,经测试最长居然要0.5秒左右.

后来经过优化,一收到数据后先不处理,而是加入到一个数据队列里,然后DataArrival事件里马上执行完毕,而数据处理是由一个定时器来扫描队列的方式完成的,由于定时器事件得到执行时一定是系统比较闲的时候,所以可靠性就保证了,这个问题便解决了.

你可以参考一下.

热点排行