Вниз
Скачать: CL | DM;

Обмен файлами   Найти похожие ветки 

← →
EvgeniyR   (2004-06-29 13:24) [0]

Здравствуйте! Как можно отправить файл с одного клиента idTCPClient другому, соответственно через idTCPServer и на клиенте-получателе сохранить его с таким же именем? Заранее благодарен.


← →
False_Delirium ©   (2004-06-29 14:29) [1]

Отправляешь файл на сервер(SendBuf ? ). На сервере по событию приёма данных перенаправляешь полученные данные на соединение клиента, которому хочешь переправить файл.

Соответственно должна быть подготовка к сеансу передачи, т.е. клиент посылает серверу запрос(в виде структуры данных фиксированного размера, которая предшествует любой сложной операции) на передачу данных, адрес получателя, имя файла и размер. После этого сервер уведомляет "пункт назначения", что сейчас к нему придёт файл определённого размера и имени(можно ещё и отправителя приписать). Далее клиент, котору предназначен файл акцептирует запрос, настраивается на приём и передаёт серверу подтверждение, что готов принять файл. Сервер получив подтверждение посылает отправителю разрешение на начало передачи файла.

Примерно всё так, но нужно учесть вариант, когда клиент, которому предназначен файл может внезапно оборвать соединение(копьютер перезагрузился?), тогда сервер должен "накопить" данные в своём временном буфере, пока связь с адресатом не будет восстановлена или очистить буфер через ЭНное кол-во истекшего времени.


← →
alienserg   (2004-06-29 19:33) [2]

Собственно слать файл стоит с помощью WriteStream:
fileToSend:=TFileStream.Create(FFileName, fmOpenRead);
FFileSize:=fileToSend.Size;
FTCPClient.WriteStream(fileToSend, true, true, FFileSize);


прием:
fileToRead:=TFileStream.Create(tmpFilename, fmCreate);
AThread.Connection.OpenWriteBuffer;
AThread.Connection.ReadStream(fileToRead,-1,false);
AThread.Connection.CloseWriteBuffer;


данные для отрисовки прогресса надо ловить в событии Connection.OnWork
Если ты шлешь файл в отдельном треде, то отрисовку прогресса нужно делать через Synchronize() или TIdSync или посылая данные окну, где идет отрисовка, через PostMessage.

Пример на тему отсылки/приема файлов есть в Indy\IndyDemos\ImageServer\Server



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.025 c
1-1092222808
Боян Георгиев
2004-08-11 15:13
2004.08.29
Вопрос о TJPEGImage


1-1092642509
EHFS
2004-08-16 11:48
2004.08.29
Список файлов


1-1092390174
Ale
2004-08-13 13:42
2004.08.29
Направление текста


14-1092206336
Labert
2004-08-11 10:38
2004.08.29
С чего вы начинали?


8-1086276830
Borealis
2004-06-03 19:33
2004.08.29
RIFF CDXA




   Наверх