Delphi XE IdTCPClient1 和 IdTCPServer1 數據的發送與接收(indy10)


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  更新

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM