Доброго времени суток!
Нашёл пример передачи файлов, но в нём клиент передаёт файл серверу
...
var
Form1: TForm1;
FName: String;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
// Запуск сервера
IdTCPServer1.DefaultPort := Port;
IdTCPServer1.Active := True;
// Запуск клиента
IdTCPClient1.Host := Host;
IdTCPClient1.Port := Port;
LServerStatus.Caption := 'Ожидание подключения...';
end;
//------------------------------------Server------------------------------------
procedure TForm1.BSelectFileClick(Sender: TObject);
begin
if OpenDialog1.Execute then FName := OpenDialog1.FileName;
end;
procedure TForm1.IdTCPServer1Connect(AContext: TIdContext);
begin
LServerStatus.Caption := 'Передача...';
end;
procedure TForm1.IdTCPServer1Disconnect(AContext: TIdContext);
begin
LServerStatus.Caption := 'Отмена передачи';
end;
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
FS: TFileStream;
FName: String;
begin
FName := AContext.Connection.IOHandler.ReadLn;
FS := TFileStream.Create('Downloads\' + ExtractFileName(FName), fmCreate); // Сохранение
try
AContext.Connection.IOHandler.ReadStream(FS, -1, True); // Поток передаваемый клиентом
finally
FreeAndNil(FS);;
end;
AContext.Connection.Disconnect;
LServerStatus.Caption := 'Файл принят';
end;
//------------------------------------Client------------------------------------
procedure TForm1.BFileReceiveClick(Sender: TObject);
var
FS: TFileStream;
begin
IdTCPClient1.Connect;
IdTCPClient1.IOHandler.WriteLn(FName);
FS := TFileStream.Create(FName, fmOpenRead or fmShareDenyNone); // Загрузка
try
IdTCPClient1.IOHandler.Write(FS); // Поток принимаемый сервером
finally
FreeAndNil(FS);
end;
IdTCPClient1.Disconnect;
LClientStatus.Caption := 'Файл отправлен';
end;
procedure TForm1.IdTCPClient1Connected(Sender: TObject);
begin
LClientStatus.Caption := 'Приём...';
end;
procedure TForm1.IdTCPClient1Disconnected(Sender: TObject);
begin
LClientStatus.Caption := 'Отмена приёма';
end;
Хотел сделать наоборот (*.pas в прикреплённом файле) и всё убил
procedure TForm1.IdTCPClient1SocketAllocated(Sender: TObject);
var
FS: TFileStream;
FName: String;
begin
FName := IdTCPClient1.IOHandler.ReadLn;
дальше код не выполняется и программа повисает