s:string;
IdUDPClient1.SendBuffer('192.168.0.1',22222,s[1],length(s));     //向服务器1发送
IdUDPClient1.SendBuffer('192.168.0.2',22222,s[1],length(s));     //向服务器2发送在内网客户机和服务器之间使用Indy UDP传输数据,以前传输的数据s长度大约在50~100个字符,几乎没有出现过丢包现象(或者是我没发现)
现在s的长度增加到几千,不过应该还没有上万的
丢包现象开始变的有点严重了,有的时候客户机发了几次服务器也没有收到(30~60秒发送1次),有的时候同一个数据包服务器1收到了服务器2没收到,或者服务器2收到了服务器1没收到,要么就是两台服务器都没收到
客户机的client buffersize是默认的8192,服务器的server buffersize也是默认的8192
内网都是直接用HUB或者Switch连接的,网络状况应该还是比较良好的
这种情况会是什么原因造成的啊?

解决方案 »

  1.   

    没说不能超过1k,只是考虑到MTU的限制,最好不要超过1500.
      

  2.   

    而且这个MTU指的是部分设备。建议楼主进行拆包,当然麻烦是需要重组。
      

  3.   

    只是在内网使用,没有Modem和Route是不是就可以不考虑MTU了?组包还没研究过,不过当初也就是为了简便而使用UDP的。
      

  4.   

    无论局域网还是互联网,Udp也是会丢包的,只是几率问题。内外可以不用考虑MTU。简单的应用只要做丢失检测,数据分包,组包就可以了,就是等停应答方式。如果是要控制速度,必须要加滑窗算法来控制。
      

  5.   

    UDP丢包是很正常的事情吧,网络设备也会引起丢包啊.
      

  6.   

    udp丢包问题,我们摸索过近一年的时间:在局域网内,编程合适,可以做到一个字节也不丢,不论包的大小。理论上udp包不能大于64K字节。
      

  7.   

    是不是可以改为用TCP呢,TCP可以保证包是顺序而且不丢包,UDP通讯需要做发包确认。