КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Then begin
Form1.Frame51.mmOut.Lines.Add(TimeToStr(Time) + ' Файл, с удалённой машины, ' + Form1.Frame51.Memo1.Lines[Form1.Frame51.P] + ' скопирован.'); Form1.Frame51.ProgressBar1.Position := ProgressBar1.position + Form1.Frame51.U;
end; End Else begin Timer1.Enabled := false; Label2.Caption := 'Копирование завершено.'; mmOut.Lines.Add('Копирование завершено.'); ProgressBar1.position := 100; MessageBox(0, 'Передача файлов завершена', 'Трансфер', mb_IconInformation); Form1.Frame51.Hide; Form1.Frame41.Show; end; end;
Серверу посылается полный пут к файлу на удалённом компьютере, и указывается путь на локальной машине. Если произошла ошибка, то в отчёт пишется имя файла с ошибкой. Взаимодействие осуществляется двумя компонентами: в клиент – программе – TIdTFTPClient, на Сервере – TIdTFTPServer. Т.е.трансфер основан на протоколе TFTP. Он базируется на транспортном протоколе UDP и разработан - максимально увеличить скорость передачи файлов. Обработка и передача файлов на Сервере осуществляется следующим образом:
procedure TMain.IdTrivialFTPServer1ReadFile(Sender: TObject; var FileName: String; const PeerInfo: TPeerInfo; var GrantAccess: Boolean; var AStream: TStream; var FreeStreamOnComplete: Boolean); Begin if FileExists(FileName) Then Begin AStream := TFileStream.Create(FileName, fmOpenRead); GrantAccess := True; FreeStreamOnComplete := True End else GrantAccess := False; end; Обработчик получает имя требуемого файла (FileName) и информацию о клиенте (PeerInfo). Если файла не существует, то GrantAccess := False; и в Клиент-программе возникает ошибка копирования файла. Дальнейшая работа Сервера проходит автоматически. Сервер делит исходный файл на дэйтаграммы и передаёт их клиенту. Обработка любого запроса клиента идёт в отдельном потоке команд.
Если файл передан, то в таймере происходит реакция на событие FileExists():
if fileexists('Files\' + Memo1.Lines[P]) Then begin Form1.Frame11.Memo2.Lines.Add(TimeToStr(Time) + ' Файл с удалённой машины ' + Memo1.Lines[P] + ' скопирован.'); Form1.Frame11.QProgressBar1.position := Form1.Frame11.QProgressBar1.position + U; End;
В отчёте пишется, что файл скопирован, и прогрессбар увеличивает свою позицию на заранее рассчитанное число.
Если все файлы скопированы, таймер отключается В отчёте пишется, что копирование завершено. Выдаётся диалоговое окно, чтобы завершить работу с копированием файлов и отображаются те фреймы на главной форме, которые были до того, как началось копирование файлов:
|