我用IdUDPClient和IdUDPServer编写网络通信程序,为什么出现延迟现象?我的设计思路是在客户段发出消息后,服务器端对数据库进行操作,然后将结果返回客户端。结果出现我点击4次发送按钮后,才得到回应消息,此时对数据库已经进行了两次操作。该怎么解决?还有如何实现在UDPClient的Timeout时间后提示客户端不能连接服务器,如何实现?是不是用相关事件?

解决方案 »

  1.   

    呵呵,你可以设置一个timer吗,在一定时间内没有返回信息再提示超时呀。
    至于延迟现象,你可以点击发送完了以后把按钮的enabled设为false吗?
    其实延迟现象是很正常的,如你的网卡比较慢,或网络不畅通等等。
      

  2.   

    不可能,你最好在你的服务器和客户段分别用一个Udapclient和UdpServer,一个管发,一个管收,用两个端口,不用让udpServer收到消息后然后又让它自己返回一个消息,这样当然很慢!客户端的Udpclient对应服务器端的Udpserver,客户端的UdpServer对应服务器端的UdpClient这样就肯定没有问题了。
      

  3.   

    好像winsock中的select函数是应该能在达到你的要求,可以设置timeout的时间的
    IdUDPClient不会没有封装吧???select(int nfds, fdset readfds, fdset writefds, fdset exceptfds, timeval timeout)可以参考:
    http://www.gamedev.net/reference/articles/article1494.asp
      

  4.   

    CSDN 上肯定没人会这个问题了。谁说的?不妥。
      

  5.   

    那不应该是udp的问题,是你写的程序的问题,我以前做过象你这样的程序,很快的!
      

  6.   

    前面的问题,我已经解决,现在需要大家讨论解决的是:
    如何实现在UDPClient的Timeout时间后提示客户端不能连接服务器,如何实现?是不是用相关事件?
    ClientUDP中的OnStatus的详细用法,大家说说