gpt4 book ai didi

delphi - Delphi XE2 中使用 TidTCPClient 和 TidTCPServer 发送和接收流

转载 作者:行者123 更新时间:2023-12-03 15:00:16 25 4
gpt4 key购买 nike

在 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 不是指针类型

关于delphi - Delphi XE2 中使用 TidTCPClient 和 TidTCPServer 发送和接收流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9443121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com