Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование Socketов в Delphi.doc
Скачиваний:
16
Добавлен:
03.05.2019
Размер:
153.6 Кб
Скачать

Посылка файлов через сокет.

Здесь мы рассмотрим посылку файлов через сокет (по просьбе JINX-а) :-). Итак, как же послать файл по сокету? Очень просто! Достаточно лишь открыть этот файл как файловый поток (TFileStream) и отправить его через сокет (SendStream)! Рассмотрим это на примере:

{Посылка файла через сокет}

procedure SendFileBySocket(filename: string);

var srcfile: TFileStream;

begin

{Открываем файл filename}

srcfile := TFileStream.Create(filename,fmOpenRead);

{Посылаем его первому подключенному клиенту}

ServerSocket1.Socket.Connections[0].SendStream(srcfile);

{Закрываем файл}

srcfile.Free;

end;

Нужно заметить, что метод SendStream используется не только сервером, но и клиентом (ClientSocket1.Socket.SendStream(srcfile))

{Прием файла через сокет}

procedure TForm1.ClientSocket1Read(Sender: TObject;

Socket: TCustomWinSocket);

var l: Integer;

buf: PChar;

src: TFileStream;

begin

{Записываем в l размер полученного блока}

l := Socket.ReceiveLength;

{Заказываем память для буфера}

GetMem(buf,l+1);

{Записываем в буфер полученный блок}

Socket.ReceiveBuf(buf,l);

{Открываем временный файл для записи}

src := TFileStream.Create('myfile.tmp',fmOpenReadWrite);

{Ставим позицию в конец файла}

src.Seek(0,soFromEnd);

{Записываем буфер в файл}

src.WriteBuffer(buf,l);

{Закрываем файл}

src.Free;

{Освобождаем память}

FreeMem(buf);

end;

11