【问题标题】:Send and Receive Stream with TidTCPClient and TidTCPServer in Delphi XE2在 Delphi XE2 中使用 TidTCPClient 和 TidTCPServer 发送和接收流
【发布时间】:2012-03-15 15:12:05
【问题描述】:

在 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..,........@........ ………………

我该如何解决这个问题?

【问题讨论】:

  • 在不同进程之间或 I/O 期间移动记录结构时,请使用 packed 指令声明记录。否则可能会出现对齐问题。我并不是说这里就是这种情况,但以后可能是一个潜在的错误。
  • 不要忘记在调用ReadStream() 之后和调用Read() 之前将流的Position 重置为0。或者,使用 TIdMemoryBufferStream 而不是 TMemoryStream 让 Indy 直接读取/写入您的记录变量。

标签: delphi delphi-xe2 indy


【解决方案1】:

不应该

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

成为

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

阅读相同:

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

请注意,此代码还有其他几个不确定因素:

  • 什么是“客户”? OTOH,通过上述更正,这被消除了。
  • 我们无法从这段代码中确认 TMachineCommand 不是指针类型

【讨论】:

    猜你喜欢
    • 2012-06-08
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多