社区
网络通信/分布式开发
帖子详情
IdUDPClient 控件怎么接收数据的?
lxj_com2006
2007-01-29 02:33:28
IdUDPClient 控件怎么接收数据的?
...全文
811
5
打赏
收藏
IdUDPClient 控件怎么接收数据的?
IdUDPClient 控件怎么接收数据的?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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;
ICS网络
控件
,Delphi 使用
比DElphi自带的网络
控件
使用更方便的网络
控件
,能在多个Delph版本中使用,对
UDP
有通信支持更科学合理。
使用
Id
UDP
Server
控件
进行广播或单点收发的demo程序
这是使用Indy中的
UDP
控件
demo程序修改而成的。对新手有帮助,因为原demo程序中只能单点发送,不能广播。我使用的是delphi7。
Delphi10中
id
HttpServer接收中文参数乱码的处理
id
HttpServer在开发中比较方便,一般情况都能应付。但在接收浏览器发送的带中文URL时,取参数就会是乱码。经过查找资源,发现大部分浏览器,中文一般会先转码为utf-8,此时,
id
HttpServer
控件
会根据请求头中ContentType的Chatset进行相应的转码,以形成正确的参数。但奇怪的是,
控件
没有取到这个值,因此,就用默认的Charset进行转码,结果就不是我们所希望的。
控件
又不能显示的设置这个charset,只能折衷地修改一下源码,以适应针对utf-8编码的转码。
UDP
协议通信演示Delphi源码
股票,证券等,用这个来发布行情数据,刷刷的。
UDP
通信的优势 速度比TCP快。
UDP
通信的缺点 一旦
UDP
包过大的话,也能正常工作。只是优势就丢失了。
id
Udp
Client
主要用于发送
udp
请求,在接收
udp
响应的时候是同步的,所以一定要设置超时,否则的话程序容易死。
id
UpdServer 即能用于发送
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
服务器来接受。
bcb2010
UDP
通讯
用了
Id
UDP
Client
和
Id
UDP
Server两个
控件
做的简单的
UDP
通讯,在BCB2010下编译通过,对初学者可以学习使用。
网络通信/分布式开发
1,594
社区成员
32,958
社区内容
发帖
与我相关
我的任务
网络通信/分布式开发
Delphi 网络通信/分布式开发
复制链接
扫一扫
分享
社区描述
Delphi 网络通信/分布式开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章