大家好,我现在想写一个通讯软件,用Delphi xe7,选择了IdUDPServer与IdUDPClient这两个控件,客户端现在用一个按钮发送与接收信息:procedure Tfm_main.Button1Click(Sender: TObject);
var
  MessageID: Integer;
  ThisMessage: String;
  ReceivedString: String;
begin
  UDPClient.Send('ABC'); //用这句发送。
  ReceivedString := UDPClient.ReceiveString();  //用这句来接收
end;上面的通讯都没有问题,但我想实现的功能如下:有A 与 B 两个客户端,还有一个S的服务端,要实现A 通过 S 向 B 发信息,现在问题是,TIdUDPClient 这个控件有没有可以即时接收服务器发过来的信息的方法,现在用了一个Timer控件来不断接收,代码如下:
procedure Tfm_main.Timer1Timer(Sender: TObject);
var
  ReceivedString: string;
begin
  if not vconetion then
    exit;
  ReceivedString := UDPClient.ReceiveString();
  if ReceivedString <> '' then
  begin
    UDPMemo.Lines.Add('Received:' + ReceivedString);
  end;end;但这样好卡,也不现实,我想问,怎么解决这个问题,当服务器发信息时才响应?
谢谢

解决方案 »

  1.   

    idUDPserver  有read属性,有数据就接收,没有不接收
      

  2.   

    我知道啊,但是我客户端是用这个IdUDPClient控件的。
      

  3.   

    我知道啊,但是我客户端是用这个IdUDPClient控件的
      

  4.   


      IdUDPClient1.ReceiveTimeout := 50;  //设置等待时间很短,0.05秒
      S := IdUDPClient1.ReceiveString(); //接收,超时,下次再来接收以上可以简单地稍微解决卡的问题
    如果要效果好,还是应该把接收放到单独的线程中去完成,收到内容后处理,之后通知主线程显示什么的。