Delphi 7 + Indy 10.0.52Server端的代码
procedure TForm1.Button1Click(Sender: TObject);
begin
  IdTCPServer.Active := True;
end;
procedure TForm1.IdTCPServerExecute(AContext: TIdContext);
var
  Stream: TIdStreamVCL;
  aStream: TMemoryStream;
begin
  if AContext.Connection.IOHandler.ReadLn = 'str' then
    AContext.Connection.IOHandler.WriteLn('this is string');
  if AContext.Connection.IOHandler.ReadLn = 'stream' then
  begin
    aStream := TMemoryStream.Create;
    Stream := TIdStreamVCL.Create(aStream);
    AContext.Connection.IOHandler.Write(Stream);
    Stream.Free;
    aStream.Free;
  end;
end;Client端代码
procedure TForm1.Button1Click(Sender: TObject);
var
  Stream: TIdStreamVCL;
  aStream: TMemoryStream;
begin
  IdTCPClient.Host := '127.0.0.1';
  IdTCPClient.Port := 1911;
  IdTCPClient.Connect;
  IdTCPClient.IOHandler.WriteLn('str');
  Caption := IdTCPClient.IOHandler.Readln;
  IdTCPClient.IOHandler.WriteLn('stream');
  aStream := TMemoryStream.Create;
  Stream := TIdStreamVCL.Create(aStream);
  IdTCPClient.IOHandler.ReadStream(Stream);
  Stream.Free;
  aStream.Free;
  IdTCPClient.Disconnect;
end;
通过string类型可以相互传输,TMemoryStream类型无法传输.请问是什么问题???

解决方案 »

  1.   

    AContext.Connection.IOHandler.Write(Stream); 
    IdTCPClient.IOHandler.ReadStream(Stream); 
    连接中你用的是Write,而后面用的是readstream,要对应出现.
    write是连接中写入字符串.
      

  2.   

    用indy局域网内传输文件图片都可以保存为TMemoryStream来进行传输的。。
      

  3.   


    感谢大家的回答,并不是你们说的这个问题.
    Indy10 用的都是IOHandler.Write,不管你是string还是stream 换句话说也就是Write是一个overload的过程.
    而Client方便如果收到的是stream那应该用ReadStream.