关于indy 10.5.7在delphi 7下的数据发送接收的用法分享
来源:互联网 发布:加工中心钻深孔编程 编辑:程序博客网 时间:2024/05/16 11:17
由于我在delphi 7中安装了最新的indy 10.5.7 版本,在使用上跟过去完全不一样,故把使用中遇到的问题作一个总结,希望遇到同样问题的朋友少走弯路。以下主要讲的TIdTCPClient的数据发送和TIdTCPServer的数据接收
//结构体:
TMyData = record
id:Integer;
Name:Array[0..20] of Char;
Sex:Array[0..10] of Char;
Age:Byte;
Address:Array[0..256] of Char;
UpdateTime:double;
end;
//发送结构体:
procedure TForm2.Button2Click(Sender: TObject);
var
SendData:TMyData;
begin
SendData.ID:=10;
StrPCopy(SendData.Name,'Wyatt');
StrPCopy(SendData.Sex,'男');
SendData.age:=25;
StrPCopy(SendData.Address,'江苏省');
SendData.UpdateTime:=Now;
IdTCPClient1.IOHandler.Write(#99);//接收时便于区分接收的数据类型 自定义
IdTCPClient1.IOHandler.Write(RawToBytes(SendData,SizeOf(SendData)));
end;
//发送TStrings类型
procedure TForm2.Button3Click(Sender: TObject);
var
sList:TStrings;
I:Integer;
begin
sList := TStringList.Create;
for I :=0 to 30 do
begin
sList.Add('数据index' + IntToStr(i));
end;
IdTCPClient1.IOHandler.Write(#111);//接收时便于区分接收的数据类型 自定义
IdTCPClient1.IOHandler.Write(sList.Count);
IdTCPClient1.IOHandler.Write(ToBytes(sList.Text,TIdTextEncoding.UTF8));
end;
//发送一行字符串数据
procedure TForm2.Button4Click(Sender: TObject);
begin
IdTCPClient1.IOHandler.Write(#12);//接收时便于区分接收的数据类型 自定义
IdTCPClient1.IOHandler.Write('可怜的中国老百姓',TIdTextEncoding.UTF8);//中文要指定编码,接收时也要进行相应的转换,否则中文会显示成?号
end;
接收:
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
ReadData:TMyData;
buf:TIdBytes;
sCmd:Char;
sList:TStrings;
I:Integer;
ListCount:Integer;
begin
//例子中没有加错误处理,请在实际使用中自行处理
sCmd := AContext.Connection.IOHandler.ReadChar;//读取要接收的数据类型 我用一个char字符来区分要读取的类型,当然最好是将命令定义成常量 这样更有可读性
if sCmd = #99 then //接收结构体
begin
AContext.Connection.IOHandler.ReadBytes(buf,SizeOf(ReadData));
BytesToRaw(buf, ReadData, SizeOf(ReadData));
with Memo1.lines do
begin
Add('ID:'+Inttostr(ReadData.Id));
Add('Name:'+StrPas(ReadData.Name));
Add('Sex:'+ReadData.sex);
Add('Age:'+Inttostr(ReadData.age));
Add('UpdateTime:'+DateTimeToStr(ReadData.UpdateTime));
end;
end
else if sCmd = #111 then //接收 TStrings
begin
ListCount := AContext.Connection.IOHandler.ReadLongInt;
sList := TStringList.Create;
try
AContext.Connection.IOHandler.ReadStrings(sList,ListCount,TIdTextEncoding.UTF8);
for I :=0 to sList.Count-1 do
begin
Memo1.Lines.Add(sList.Strings[I]);
end;
finally
sList.Free;
end;
end
else if sCmd = #12 then
begin
Memo1.Lines.Add(AContext.Connection.IOHandler.ReadString(AContext.Connection.IOHandler.InputBuffer.Size,TIdTextEncoding.UTF8)
end
else
AContext.Connection.IOHandler.InputBuffer.Clear;//清除不能识别的命令
);
end;
- 关于indy 10.5.7在delphi 7下的数据发送接收的用法分享
- indy 10.5.7的数据发送接收的用法 .
- 关于Delphi 下indy Telnet 组件生成com的问题
- 在Delphi 7 中用Indy开发Socket应用程序(下)
- Delphi的Indy通信中发送流文件的注意事项
- Windows下数据的接收和发送
- Delphi 7的Indy网络组件学习笔记01
- 关于delphi的网络组件indy的一些东西
- 在delphi中用indy实现FTP上传 下载的例子
- 在Delphi 7 中用Indy开发Socket应用程序(上)
- 在Delphi 7 中用Indy开发Socket应用程序
- 在Delphi 7 中用Indy开发Socket应用程序
- 在Delphi 7 中用Indy开发Socket应用程序
- 在Delphi 7 中用Indy开发Socket应用程序
- 在Delphi下,使用线程向窗体发送动态数组数据的解决方法~
- Delphi 7 中使用Indy创建独立的 Web Services/SOAP 服务器(一)
- Delphi 7 中使用Indy创建独立的 Web Services/SOAP 服务器(二)
- Delphi 7 中使用Indy创建独立的 Web Services/SOAP 服务器(三)
- 让dropdownlist的值为空
- 查找一维有序浮点数组中相近的数
- FLEX教程
- T-CODE that exists in the SAP
- Ping to Determine MTU along a route
- 关于indy 10.5.7在delphi 7下的数据发送接收的用法分享
- [c#]如何使用windows时间同步服务获取准确时间
- Jsp页面中ajax提交数据:及hbm.xml文件中出现的错误
- AspNetPager分页
- mini240外部按键中断程序
- mini240外部按键中断程序
- 存储过程分页
- Svn的错误:svn中有某些文件上传不上去
- 献给做技术的人--三毛的一首小诗《一棵树》