簡體   English   中英

使用Delphi XE2中的TidTCPClient和TidTCPServer發送和接收流

[英]Send and Receive Stream with TidTCPClient and TidTCPServer in Delphi XE2

在Delphi XE2中,我有一個具有以下結構的記錄類型:

  TMachinInfoRec = record
    IPStr: string[15];
    Username: string[50];
    Computername: string[100];
    SentTime: TDateTime;
    HasCommand: integer; 
    ClientCommands: array[0..9] of TMachineCommand;
  end;

我在客戶端和TMemoryStream變量上定義了一個變量,並使用TidTCPClient組件發送流:

var
  MIRec: TMachinInfoRec;
  msRecInfo: TMemoryStream;

begin
  MIRec.IPStr = '192.168.100.101';
  MIRec.Username := 'user-a';
  MIRec.Computername := 'Computer-a';
  MIRec.SentTime := Now();

  idTCPClient.Host := '192.168.100.138';
  idTCPClient.Port := 6000;

  idTCPClient.Connect;

  msRecInfo := TMemoryStream.Create;
  msRecInfo.Write(msRecInfo, SizeOf(Client));

  msRecInfo.Position := 0;
  idTCPClient.IOHandler.Write(msRecInfo);
end;

並使用TidTCPServer獲取服務器端的信息:

procedure TFrmMainServer.TCPServerExecute(AContext: TIdContext);
var
  MIRec: TMachinInfoRec;
  msRecInfo: TMemoryStream;
begin
  msRecInfo:= TMemoryStream.Create;

  AContext.Connection.IOHandler.ReadStream(msRecInfo, SizeOf(MIRec));

  msRecInfo.Read(msRecInfo, sizeOf(MIRec));

  ShowMessage(MIRec.IPStr);
  ShowMessage(MIRec.Computername)
end;

但是以這種格式顯示的字符串:

MZ?......... .. YY,....... @ ........................... ........ ....

我怎么解決這個問題?

不能

     msRecInfo.Write(msRecInfo, SizeOf(Client));

     msRecInfo.Write(miRec, SizeOf(miRec));

閱讀相同:

     msRecInfo.Read(miRec, sizeOf(MIRec));

請注意,此代碼還有其他幾個不確定因素:

  • 什么是“客戶”? OTOH,通過上述修正,這被消除了。
  • 我們無法從此代碼確認TMachineCommand不是指針類型

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM