TCP发送数据丢掉的原因
TCP发送数据丢失的原因从服务器上发送数据,在客户机上接收,以前很正常,现在服务器端网络升级了网络带宽,发
TCP发送数据丢失的原因
从服务器上发送数据,在客户机上接收,以前很正常,现在服务器端网络升级了网络带宽,发送数据稍大时就丢失数据,客户机无法收到,采用发送-应答方式,也没有办法。
而且丢失数据很有规律。
每次发送1000+8个子节,到了第10次接收,就只能收几百个字节了
请高手指点一下原因,多谢!
[解决办法]
有没有把32位的变量改成64位的,或是反过来?查查吧。调试下吧,很容易查出问题,应该和网络没什么关系。
[解决办法]
查代码吧,必须的
[解决办法]看上去很象Socket.ReceiveBufferSize缺省大小是8192,接收9次左右,每次1000字节,差不多就是这个大小。
如果是这个原因,说明你的接收处理程序处理太慢了,缓冲区容不下新到的数据了。
你应该自己规定个协议,如果对方发送速度太快了,就让对方停下,等到你这边处理完了再发个标志给对方继续发送。
[解决办法]为什么要确认呢?tcp已经是可靠的了,不是多此一举吗?正常的发送接收不是判断长度的吗?你整个次数,也太理想了吧?要想确认除非你发一个接收一个,再回发一个,然后再发一个,。。。。。
[解决办法]问题可能是在客户端的接收部分,代码呢?
[解决办法]bytesRec = sender.Receive(bytes );//接收数据,1000+8的缓冲区
if (bytesRec == sendbytes + 8)
这里有问题。
注意TCP不是包协议,不保证发一个包,就每次接收也是一个包。
可能这次只收到半个包,也可能收到一个半, 下次再收到半个。
你要自己合并接收数据,再分包。
[解决办法]TCP发送数据不处理粘包肯定是不行的,而且要提高效率,接收和解析最好分离,推荐解析数据用线程池
[解决办法]代码写得有问题,80%