Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Отправка получение файлов по сети TCP


Автор: Norfonzor 22.10.2010, 12:29
клиент (отправка):

Код

IdTCPClient1.Socket.WriteLn('file', enUTF8);//отправка запроса принятия файла

по таймеру проверка подтверждения готовности принятия файла сервером
Код

if IdTCPClient1.Socket.ReadLn(enUTF8)='File_load_ok' then IOHandler.WriteFile('C:\students.mdb', true);


сервер:
на TCPServer1Execute
Код

var fs: TFileStream;
....

if l='file' then
begin
  AContext.Connection.IOHandler.WriteLn('File_load_ok');//отправка подтверждения готовности принятия файла
  fs:= TFileStream.Create('C:\students_UPload.mdb', fmCreate);//создает место на диске
  AContext.Connection.IOHandler.ReadStream(fs, -1, true);//читает файл из Stream
  fs.Free;//
  showmessage('Сервер: принял файл');//этого сообщения не появляется. 

end



как узнать принял ли сервер файл?
Удачно ли использовать этот метод передачи файлов? размер БД до 7мб

Спасибо.

Автор: Snowy 22.10.2010, 12:50
Передай серверу размер файла перед отправкой.
Тогда сможешь указать нужное количество байт, а не -1.
Это позволит не разрывать связь после отправки файла.
Соответственно, после отправки можно будет передать код успеха.

Автор: Norfonzor 25.10.2010, 07:10
спасибо, а вот чем отличается Socket и IOHandler между собой, Socket ждет ответа на сообщение???

Код

AContext.Connection.Socket.WriteLn
AContext.Connection.IOHandler.WriteLn


а каким способом получить размер файла перед отправкой? 
Код

FS := TFileStream.Create(Filename, fmOpenRead);
size:=FS.Size;

Определяя размер файла так^ сервер не останавливается принимать файл, и зависает.


Нашел кучу пример с использованием "AThread" по отправке файлов с определением их размера но в 10ой indy этого нет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)