IdUDPClient 控件怎么接收数据的?

lxj_com2006 2007-01-29 02:33:28


IdUDPClient 控件怎么接收数据的?
...全文
760 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxj_com2006 2007-01-29
  • 打赏
  • 举报
回复

IdUDPClient 如何接收到IdUDPServer返回的数据。
lxj_com2006 2007-01-29
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
ReceivedString:String;
rStr : array[0..102400] of char;
ms:tmemorystream;
begin
IdUDPClient1.Host:=edtAddress.Text;
IdUDPClient1.Port:=9999;
IdUDPClient1.Active:=True;

IdUDPClient1.Send(edtContent.Text);
IdUDPClient1.ReceiveBuffer(rStr,102400);
meoReceive.Lines.Add(rStr);
end;
lxj_com2006 2007-01-29
  • 打赏
  • 举报
回复

//ͨ¹ýSend·½·¨À´½øÐй㲥
procedure TForm1.Button1Click(Sender: TObject);
var
ReceivedString:String;
rStr : array[0..102400] of char;
ms:tmemorystream;
begin
//IdUDPClient1.Send(edtAddress.Text, 9999, edtContent.Text);
//ReceivedString := IdUDPClient1.ReceiveString();
//meoReceive.Text:=ReceivedString;
IdUDPClient1.Host:=edtAddress.Text;
IdUDPClient1.Port:=9999;
IdUDPClient1.Active:=True;

IdUDPClient1.Send(edtContent.Text);
//IdUDPClient1.SendBuffer(edtContent.Text,Length(edtContent.Text));
IdUDPClient1.ReceiveBuffer(rStr,102400);//,'192.168.184.1',9999); //,'192.168.184.1',9999
//ReceivedString := IdUDPClient1.ReceiveString();
//IdUDPClient1.sendbuffer(ip,port,ms.memory^,ms.size);

meoReceive.Lines.Add(rStr);
end;
hongqi162 2007-01-29
  • 打赏
  • 举报
回复
procedure FIdUDPServerUDPRead(
Sender: TObject; AData: TIdBytes; ABinding: TIdSocketHandle);
var
lReceiveLen:integer;
lCurrentReceiveBuf:array of byte;
begin
lReceiveLen:=Length(AData) ;
setlength(lCurrentReceiveBuf, lReceiveLen );
Move(AData[0],lCurrentReceiveBuf[0],lReceiveLen);
...
处理数据
end;
hongqi162 2007-01-29
  • 打赏
  • 举报
回复
var
ms:tmemorystream;
begin
......
idudpc.sendbuffer(ip,port,ms.memory^,ms.size);
......
end;
股票,证券等,用这个来发布行情数据,刷刷的。 UDP通信的优势 速度比TCP快。 UDP通信的缺点 一旦UDP包过大的话,也能正常工作。只是优势就丢失了。 idUdpClient 主要用于发送udp请求,在接收udp响应的时候是同步的,所以一定要设置超时,否则的话程序容易死。 idUpdServer 即能用于发送udp数据包,也能用于接收udp数据包。但是设计的主要目的还是用于收到udp数据包之后给于反馈。 UDP包的大小问题 资料1:以太网的MTU是1500字节,IP包头占20个字节,UDP首部占8个字节,也就是说实际数据应该小于1472字节. 资料2:鉴于Internet上的标准MTU值为576字节,所以我建议在进行Internet的UDP编程时.最好将UDP的数据长度控件在548字节(576-8-20)以内. 测试结果: 0-548字节:会完美的展现UDP协议的优势(速度刷刷的)。 大于1472字节以后的话,也可以正常执行。你会见识到什么叫做不可靠的信道(经过测试90%以上还是成功的,只是速度慢了很多)。 数据包大于2K速度明显变慢了;数据包大于3K,成功率60%到80%;数据包大于4k,成功率20%以下。 结论: 1.UDP协议还是比较可靠的。使用它能充分挖掘速度的潜力。通常大部分请求和相应都在548以下,小部分请求超过548。 2.548字节,可以存储274个汉字呢。比手机短信都长。你传什么那么大? 3.尤其是双方都在修改数据,需要实施数据实时同步的时候。修改量都比较小,用udp再合适不过了。 客户端的阻塞式响应不太理想 可以采用的办法是双方都开UDP服务器来接受。

1,593

社区成员

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

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