在阻塞方式下的Indy的UDP组件发送和接收数据时,SERVER端采用多线程接受数据,有多个客户C端的连接同时向SERVER发送数据,SERVER端因为自定义的接受数据的线程与程序的主线程轮换占用CPU时间,就在主线程占用时(主线程不接受数据,是干别的),多个客户端发来的N个包包,是会重写接受到的数据缓冲区,还是会在没有读取缓冲区前不允许将接收来的包包重写缓冲区,因而将其它客户端的包包阻塞回去,让其等待重发?

解决方案 »

  1.   

    Indy的udpserver自己会处理每个客户端数据,不必关心数据如何接收,只关心如何处理就可以了
      

  2.   

    UDP没有自动重发机制,TIdUDPServer的缓冲区满了以后,会将老数据冲掉。
    但由于TIdUDPServer的线程机制,一般不会因为主线程的原因造成丢包,
    除非你的计算机配置较差,或者主线程任务非常重。