日期:2014-05-17  浏览次数:20743 次

TCP发送数据丢失的原因
从服务器上发送数据,在客户机上接收,以前很正常,现在服务器端网络升级了网络带宽,发送数据稍大时就丢失数据,客户机无法收到,采用发送-应答方式,也没有办法。

而且丢失数据很有规律。

每次发送1000+8个子节,到了第10次接收,就只能收几百个字节了


请高手指点一下原因,多谢!

------解决方案--------------------
有没有把32位的变量改成64位的,或是反过来?查查吧。调试下吧,很容易查出问题,应该和网络没什么关系。
------解决方案--------------------
引用:
补充:在局域网测试没有问题,服务器在外网就有问题。
以前服务器发送数据很简单:如下
                 bytesSent = handle.Send(sendbuf );

客户端也可收到,后来服务器所在网络升级了,数据一大就丢失,好像数据大于1024X10 就不行了。
 后来服务器改为分段发送,每次发送1024+8个字节,然后等待客户端回应,收到回应后发下一个1024+8的数据,可是到了第10次,还是收不到数据,不知为何?
                       
查代码吧,必须的
------解决方案--------------------
看上去很象Socket.ReceiveBufferSize缺省大小是8192,接收9次左右,每次1000字节,差不多就是这个大小。

如果是这个原因,说明你的接收处理程序处理太慢了,缓冲区容不下新到的数据了。

你应该自己规定个协议,如果对方发送速度太快了,就让对方停下,等到你这边处理完了再发个标志给对方继续发送。

------解决方案--------------------
引用:
现在服务器发送代码:   public int Sendbytes(byte [] bytes)//待发数据在数组中
        {
           
            int bytesSent=0;
           
            int page, n,k,t;
            n = bytes.Length;
            int sendtimes = 1;//连续发送次数sendtimes=1,若设为10表示发10个包再确认一次
            int sendbytes=1000;//每次发送数据大小
            page = 0;  //发送页面
            byte[] sendbuf = new byte[sendbytes + 8];//发送缓冲区