IdUDPServer有接收事件,IdUDPClient为何没有接收事件?它怎样接收数据呢?

解决方案 »

  1.   

    NMUDP许多用过,这IdUDPServer/Client好象没人用过似的
      

  2.   

    看Demo,直接用IdUdPClient.ReceiveBuffer 或者 ReceiveString
      

  3.   

    BCB6.0中虽有INDY的例子,但无UDP的例子;
    可能BCB2007中有,待明天上班看一看.    IdUdPClient.ReceiveBuffer(),没有事件触发, 什么时候调用它呢,
    难道不停地接收? 
      

  4.   

    IdUDPClient   元件沒有像   IdUDPServer   元件之   OnUDPRead   事件,   
      所以由   IdUDPServer   Send   到   IdUDPClient   端   的Message,   沒有     
      event   来接收,需由类似下列的程式来接收,即   IdUDPClient   Send   
      or   Broadcast   后,   马上要由Repeat   IdUDPClient1.ReceiveString();...   Until   来处理   
      我觉得十分不便,   也不安全,   因   IdUDPClient   的   ReceiveTimeout   
      时间要设长一点,   否则当   IdUDPClient   是   Broadcast  后,   IdUDPClient     
      自己來不及接收,   设太长时间,   效益又不好.  另外可以考虑调用IdUDPClient的ReceiveBuffer()方法 
      

  5.   

    我自以为:
        1。IdUDP支持多线程,除缓冲大外,这是它比NMUDP强的地方,
    IdUDPClient正是为多线程支持的客户端;
        2。IdUDPServer支持OnUDPRead事件,这是异步方式,如果
    在客户端也要支持OnUDPRead,很简单:客户端也用IdUDPServer代替
     IdUDPClient,UDP客/服是平等的,所以TNMUDP客/服干脆共用一个元
    件;
        就这样解决了!   
      

  6.   

    UDP根本不存在Client与Server的区别,两端都用TIdUdpServer就行了。如果你想自己实现线程的话另算。
      

  7.   

    同意呀,跟我的想法一致!
    1。我最近一直在研究UDP控件,结论:InDy的IdUDP比FastNet的NMUDP的功能要强多了,
    所以 BCB2007取消了FastNet,前者略复杂一点点;
    2。UDP会包的原因是:一方不停地发送,肯定会丢包;解决的办法:采用主/从访问,客户
    端请求一次,服务端只发送一个包,如何没收到,再请求一次,这种方式就不会丢包;
    如果客户端要求服务端发送一个文件过来,可这样:
       客户端请求发送文件(送文件名)      服务端打开文件,返回包的个数
       客户端请求文件的第一个包            服务端发送第一个包
                            。。
       客户端请求文件的最后一个包          服务端发送最后一个包,并关闭文件
    用这种主/从方式传递屏幕图像,就不会丢包;
      

  8.   

    同意呀,跟我的想法一致! 
    1。我最近一直在研究UDP控件,结论:InDy的IdUDP比FastNet的NMUDP的功能要强多了, 
    所以 BCB2007取消了FastNet,前者略复杂一点点; 
    2。UDP丢包的原因是:一方不停地发送,肯定会丢包;解决的办法:采用主/从访问,客户 
    端请求一次,服务端只发送一个包,如果没收到,再请求一次,这种方式就不会丢包; 
    如果客户端要求服务端发送一个文件过来,可这样: 
      客户端请求发送文件(送文件名)      服务端打开文件,返回包的个数 
      客户端请求文件的第一个包            服务端发送第一个包 
                          。。 
      客户端请求文件的最后一个包          服务端发送最后一个包,并关闭文件 
    用这种主/从方式传递屏幕图像,就不会丢包; 
     
     
     
      

  9.   

    这样的方式会不会传送慢呢,这和TCP有什么区别呢?????????
      

  10.   

    我用Timer解决问题,也许你可以参考一下  Timer := TTimer.Create(self);
      Timer.OnTimer := TimerTimer;
      Timer.Interval := 9000;  // 9 sec. 获取一次
      Timer.Enabled := True;procedure TForm1.TimerTimer(Sender: TObject);
    var
      ReceivedString: String;
    begin
        ReceivedString := idUDPClient.ReceiveString();    if ReceivedString = '' then
          memo1.Lines.Add('No response received from the server after ' + IntToStr(udpTimer.Interval) + ' millseconds.')
        else
          memo1.Lines.Add(ReceivedString);end;