Посылка файлов через сокет.
Здесь мы рассмотрим посылку файлов через сокет (по просьбе 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; |