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类型无法传输.请问是什么问题???
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类型无法传输.请问是什么问题???
IdTCPClient.IOHandler.ReadStream(Stream);
连接中你用的是Write,而后面用的是readstream,要对应出现.
write是连接中写入字符串.
感谢大家的回答,并不是你们说的这个问题.
Indy10 用的都是IOHandler.Write,不管你是string还是stream 换句话说也就是Write是一个overload的过程.
而Client方便如果收到的是stream那应该用ReadStream.