|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Indy 10 передача файлов
Приветствую всех!
Меня до сих пор мучает проблема передачи файлов по схеме клиент-сервер. До Indy делал передачу через Socket, но файлы приходили до неузнаваемости битыми, а с Indy другая проблема - при получении файла от сервера, клиент намертво зависает. Код сервера Код:
procedure TForm1.FormCreate(Sender: TObject); begin IdTCPServer1.Active:=true; end; procedure TForm1.FormDestroy(Sender: TObject); begin IdTCPServer1.Active:=false; end; procedure TForm1.IdTCPServer1Execute(AContext: TIdContext); var S: string; f: file of byte; fs,fn: string; mem:TmemoryStream; begin AssignFile(f,'news.zip'); Reset(f); fs:=inttostr(FileSize(f)); fn:=ExtractFileName('news.zip'); CloseFile(f); mem:=Tmemorystream.Create; //-------------------------------------------------- S := AContext.Connection.IOHandler.ReadLn(); Memo1.Lines.Add('получена команда' + S); //-------------------------------------------------- if SameText(S, 'dlmain') then try AContext.Connection.IOHandler.WriteLn('send_file'); AContext.Connection.IOHandler.WriteLn(fs); AContext.Connection.IOHandler.WriteLn(fn); mem.LoadFromFile('news.zip'); AContext.Connection.IOHandler.Write(mem); mem.SaveToFile('news.zip'); finally Memo1.Lines.Add('Передача файла'); end; mem.Free; end; end. Код клиента Код:
procedure TForm1.Button1Click(Sender: TObject); var comm,fs,fn:string; mem: TmemoryStream; begin IdTCPClient1.IOHandler.WriteLn('dlmain'); mem:=Tmemorystream.Create; comm:=IdTCPClient1.IOHandler.ReadLn(); Label1.Caption:=comm; fs:=IdTCPClient1.IOHandler.ReadLn(); Label2.Caption:=fs; fn:=IdTCPClient1.IOHandler.ReadLn(); Label3.Caption:=fn; idTCPClient1.IOHandler.ReadStream(mem, -1, true); mem.SaveToFile('news.zip'); mem.Free; end; procedure TForm1.FormCreate(Sender: TObject); begin IdTCPClient1.Connect; end; procedure TForm1.FormDestroy(Sender: TObject); begin IdTCPClient1.Disconnect; end; end. |