procedure TFrmDisMain.SpeedButton1Click(Sender: TObject); var ReadFile:TMemoryStream; RecevFileName,FilePath:string; begin IDTCPClientDown.Host := serverip;//服务器的地址
if IDTCPClientDown.Connected then IDTCPClientDown.Disconnect;
FilePath:=Edit1.Text; //文件路径
with IDTCPClientDown do begin Connect;//连接到服务器 while Connected do begin ReadFile:=TMemoryStream.Create;//创建一个TMemoryStram对象 try
WriteLn(FilePath); //指定路径 RecevFileName:=ReadLn;//从服务器端获得文件名 ReadStream(ReadFile,-1,True);//以流模式从服务器端获得文件内容,参数分别是ReadFile表示流对象,-1表示一直读取直到对方断开,True表示在NT操作系统下提高性能,对9x无效 ReadFile.Seek(0,soFromBeginning);//定位流指针到开始 SaveDialog1.FileName:=ExtractFileName(RecevFileName); if SaveDialog1.Execute then begin ReadFile.SaveToFile(SaveDialog1.FileName); MessageBox(Handle,'文件下载成功','提示',MB_OK); end; end else begin MessageBox(Handle,'请选择一个要下载的文件','提示',MB_OK); Exit; end;
procedure TFormServer.IdTCPServerDownExecute(AThread: TIdPeerThread); var SendFile:TFileStream; RecevFileName:string; begin with AThread.Connection do begin RecevFileName:=ReadLn; WriteLn(RecevFileName);//把文件名发送给客户端 SendFile:=TFileStream.Create(RecevFileName,fmOpenRead);//创建一个TFileStream,打开我们要发送的文件 WriteStream(SendFile);//使用流模式把文件发送到客户端 Disconnect;//断开连接 SendFile.Free;//释放流对象 end; end;