在我刚做的一个项目中,使用UDP将各个子节点数据汇总到总中心。当接入的节点少时,通信软件负载能力很好,UDP传输没有发生问题,
当子节点增加到将近20个的时候,发现有丢数现象。
开始以为是Server接点接收的太慢,接收缓冲区太小,但在做了详细的日志分析之后
发现,所有的缓冲区的数据都被读出,没有溢出现象。子节点数据也全被正确打出,没有发生错误!
那么数据到底丢在那里了呢,难道丢在中间的网络传输中?实际数据流最大不超过300K,可是不时有数据丢失。现场环境是:SERVER和下端节点所处的都是100M局域网,SERVER局域网与下端节点局域网之间是10M网,以交换机相连。虽说UDP是不可靠传输,但照理说网络带宽应该不成问题呀!请高手一定帮帮我!

解决方案 »

  1.   

    to catyou(雨后春笋),yintongshun(踏雪有痕)
    我把数据包最大设为1024(连同UDP头在内),不足可以,超过的分开传。to yaolan1999(可可猫) 
    我是用“网络监视器”测的,测到的是所有留经通信服务器的数据,局域网是用交换机连接,每条线路都是100M,数据流量最大的只能是通信服务器。当然,我也查了,排除网络病毒的情况。
      

  2.   

    难死我了,全省的数据呀!还有很多节点没有节入呢,实在不行的话只好改TCP了,5555555
      

  3.   

    CAsyncSocket* pSock;.....int iRecv = pSock->ReceiveFrom(szBuf,sizeof(szBuf),szip,port,0);
    if (iRecv > 0)
    {
    ....
    }在县城中循环接收,1毫秒接收一次,有数据则把数据打倒处理县城中。接收县城的县城级别被设为THREAD_PRIORITY_TIME_CRITICAL每次接收写有日志,接收速度已经够快了,因为每次最多只接收到一个数据报,没有积压现象。
    计算机是多CPU处理,处理能力没问题。
      

  4.   

    建议你看<网络编程>再写程序
      

  5.   

    1毫秒接收一次,应该还是有延时的,接收应该是没有时间间隔的。我有一次将每次接收时间间隔设为5毫秒,结果就发现数据接收不到。建议在socket接收后打印各节点接收数据长度,以查看数据是否正确。还有判断是否是延时引起的,可以以5个节点无延时发送数据来诊断。
      

  6.   

    我感觉哈!
       UDP打点,在网络中流通问题好像不是很大!(只要不大到需要分片的程度就好)   但,UDP包,流的太频繁,就容易丢了!
      

  7.   

    我觉得WIM说得不对,UDP的专长就是在稳定网络中传送小的数据包,因为它本身没有验错机制,如果大了就很容易出问题。相比之下,包的数目却不是有很大关系。
      

  8.   

    catyou(雨后春笋) 1000个终端同时向服务端发送数据,隔2毫秒发送一次,你是怎么实现的?有没有相关的测试工具?