TIdUDPClient的问题

kpym 2015-04-06 11:16:57
大家好,我现在想写一个通讯软件,用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;


但这样好卡,也不现实,我想问,怎么解决这个问题,当服务器发信息时才响应?
谢谢
...全文
328 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
蓝色光芒 2015-04-08
  • 打赏
  • 举报
回复

  IdUDPClient1.ReceiveTimeout := 50;  //设置等待时间很短,0.05秒
  S := IdUDPClient1.ReceiveString(); //接收,超时,下次再来接收
以上可以简单地稍微解决卡的问题 如果要效果好,还是应该把接收放到单独的线程中去完成,收到内容后处理,之后通知主线程显示什么的。
qq_26495549 2015-04-07
  • 打赏
  • 举报
回复
引用 1 楼 houjiuhong 的回复:
idUDPserver 有read属性,有数据就接收,没有不接收
kpym 2015-04-06
  • 打赏
  • 举报
回复
引用 1 楼 houjiuhong 的回复:
idUDPserver 有read属性,有数据就接收,没有不接收
我知道啊,但是我客户端是用这个IdUDPClient控件的
kpym 2015-04-06
  • 打赏
  • 举报
回复
我知道啊,但是我客户端是用这个IdUDPClient控件的。
houjiuhong 2015-04-06
  • 打赏
  • 举报
回复
idUDPserver 有read属性,有数据就接收,没有不接收

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧