Home

Page 198
Page 198
background image

Простые приемы работы с сетью 191

Здесь происходит проверка: если первые пять символов пришедшего текста
равны слову size:, то значит к нам пришел размер файла, и мы должны

начать его прием. Вначале вырезаем размер и сохраним его в текстовой пе-

ременной. Для этого необходимо скопировать из пришедшего текста все
символы от 6-го (после слова size:) и до символа #о:

s l : = c o p y ( s ,  6 ,  P o s ( # 0 ,

Следующей строкой происходит преобразование текстового представления

размера в число и сохранение его в переменной DataSize. Теперь из при-

шедшего текста удаляем все символы до первого нулевого символа #о, т. е.

удаляем информацию о размере передаваемого файла.

Далее мы устанавливаем переменную Reciving равной true. Эта перемен-

ная будет говорить о том, что началась передача файла. Так как файл не
может прийти за один раз, и мы будем получать его порциями приблизи-

тельно по 8 Кбайт, то при последующих вызовах этого обработчика события

мы должны знать, что пришедшее

 это данные из файла.

Оставшиеся данные в переменной s

 это уже первая порция файла, кото-

рый мы запросили. Чтобы сохранить их в файл, создаем файловый поток:

В качестве имени указываем output.dat. Я не знаю точного имени файла,

поэтому использую такое. Путь не указывается, значит, файл будет записан
в ту же директорию, где находится программа. В качестве флага при откры-

тии файла я указываю

 что заставляет создать новый файл. Если

такой файл уже существует, то он будет перезаписан.

Я упрощаю пример, чтобы не загружать книгу неинтересной информацией,
а вы можете потом расширить его и добавить возможность передачи имени

файла. Я бы сделал это следующим образом. Сервер при передаче файла

должен отправлять не только размер, но и имя файла, например так:

 '+IntToStr (fs  Size) +

 +

 ;

Теперь на клиенте, после того как вы выделили размер файла и удалили этот
текст из переменной s, таким же образом можно выделить  имя файла и уда-

лить его из принятых данных, чтобы сохранять в файл только его данные.

После открытия файла сохраняем принятые данные с помощью вызова
метода write.

Теперь вы готовы разобраться с куском кода, который мы пропустили:

if Reciving then

begin

fs.Write(s[l], length(s));
if

 then

begin


Copyright © 2020 Файлообменник files.d-lan.dp.ua

Использование любых материалов сайта возможно только с разрешения автора.