Delphi XE IdTCPClient1 和 IdTCPServer1 數據的發送與接收(indy10)
1、IdTCPClient1 端 發送數據
1.1 發送結構體:
//定義結構體 TMData = record id:Integer; Name:Array[0..20] of Char; Age:Byte; UpdateTime:double; end; //發送 procedure TForm2.Button2Click(Sender: TObject); var SendD: TMData; begin SendD.ID := 10;
StrPCopy(SendD.Name, 'Delphi 您好');
SendData.age := 18;
SendD.UpdateTime := Now;
IdTCPClient1.IOHandler.Write(#100); //提前發送一個標識符,用於區分數據 IdTCPClient1.IOHandler.Write(RawToBytes(SendD, SizeOf(SendD)));
end;
1.2 發送TStrings類型
procedure TForm2.Button3Click(Sender: TObject);
var
sList:TStrings;
I:Integer;
begin
sList := TStringList.Create;
for I :=0 to 50 do
begin
sList.Add('數據Test' + IntToStr(i));
end;
IdTCPClient1.IOHandler.Write(#200);
IdTCPClient1.IOHandler.Write(sList.Count);
IdTCPClient1.IOHandler.Write(ToBytes(sList.Text,TIdTextEncoding.UTF8));
end;
1.3 發送一行字符串數據
procedure TForm2.Button4Click(Sender: TObject);
begin
IdTCPClient1.IOHandler.Write(#10);
IdTCPClient1.IOHandler.Write('Delphi測試',TIdTextEncoding.UTF8);
end;
2、IdTCPServer端 接收數據:
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
RData:TMData;
buf:TIdBytes;
sCmd:Char;
sList:TStrings;
I:Integer;
ListCount:Integer;
begin
sCmd := AContext.Connection.IOHandler.ReadChar; //先讀取Char結構數據
if sCmd = #100 then //接收結構體
begin
AContext.Connection.IOHandler.ReadBytes(buf,SizeOf(RData));
BytesToRaw(buf, RData, SizeOf(RData));
with Memo1.lines do begin
Add('ID:'+Inttostr(RData.Id));
Add('Name:'+StrPas(RData.Name));
Add('Age:'+Inttostr(ReadData.age));
Add('UpdateTime:'+DateTimeToStr(RData.UpdateTime));
end;
end else if sCmd = #200 then //接收 TStrings
begin
ListCount := AContext.Connection.IOHandler.ReadLongInt; //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 = #10 then
begin
Memo1.Lines.Add(AContext.Connection.IOHandler.ReadString(AContext.Connection.IOHandler.InputBuffer.Size,TIdTextEncoding.UTF8) );
end else
AContext.Connection.IOHandler.InputBuffer.Clear; //清除
end;
創建時間:2020.06.23 更新