Welcome

首页 / 软件开发 / Delphi / Delphi的Indy通信中发送流文件的注意事项

Delphi的Indy通信中发送流文件的注意事项2012-01-11 博客园 DJ尐舞客户端发送流到服务器端有几种方式,这里讨论两种:

1.客户端连接到服务器后,发送一个流,服务器接收一个流。

{*------------------------------------------------------------------------------
客户端发送流,假定已经建立连接
------------------------------------------------------------------------------*}
procedure TClientForm.Button3Click(Sender: TObject);
var s: string; stream: TStream;
begin

try
s := "Hello world!";
stream := TStringStream.Create(s);
IdTCPClient1.OpenWriteBuffer;
IdTCPClient1.WriteInteger(stream.Size);//注意这里:要先写入流的长度,在读取的时候如果使用 AThread.Connection.ReadStream(stream);
IdTCPClient1.WriteStream(stream, true);
finally
IdTCPClient1.CloseWriteBuffer;
stream.Free;
end;
end;

{*------------------------------------------------------------------------------
服务器接收流
------------------------------------------------------------------------------*}
procedure TServerForm.IdTCPServer1Execute(AThread: TIdPeerThread);
var stream: Tstream;
begin

if not AThread.Terminated and AThread.Connection.Connected then
begin
stream := TStringStream.Create("");

AThread.Connection.ReadStream(stream);//这句相当于ReadStream(stream,-1,false),就是根据流的前四个字节读出流长度,然后再将流读出
stream.Position := 0;
Memo1.Lines.LoadFromStream(stream);

end;

end;