ВУЗ:
Составители:
Рубрика:
- 50 -
end;
{ Создать строку заголовка типа содержимого файла }
FileTypeHeader := 'Content-Type: ' + IsFileType + #13#10;
end; { конец FileTypeHeader }
function TWbServe.FileHeader: String;
var IsHeaderStr: String;
begin
{ Вставить все три строки вместе в раздел заголовка сообщения }
IsHeaderStr := 'Allow: GET, HEAD' + #13#10;
IsHeaderStr := IsHeaderStr + FileSizeHeader + FileTypeHeader;
FileHeader := IsHeaderStr;
end; { конец FileHeader }
Собственно отправка файла клиенту осуществляется процедурой Process-
DataSend (если файл чрезмерно велик, придется усложнить процедуру):
procedure TWbServe.ProcessDataSend;
var liCurByteCount: Integer; IcCurByte: Byte;
IpTransferDataPointer: PChar;
begin
if ibFileOpen then { Запрашиваемый файл открыт ? }
begin
liCurByteCount := 0; { Инициализировать счетчик байтов }
if (not Eof(TransferFile)) then { Мы уже в конце файла?)
begin
ClearBuffer(TransferBuffer, 8192); { Нет, очистить буфер передачи }
{ Считать 4’096 байтов из файла в буфер }
while ((liCurByteCount < 4096) and (not Eof(TransferFile))) do { цикл по байтам }
begin
Read(TransferFile, IcCurByte);
TransferBuffer[liCurByteCount] := Char(IcCurByte);
Inc(liCurByteCount);
end;
{ Отправить клиенту содержимое буфера }
NetSocket.SocketSendBuffer(isConnectionSocket, handle,
OWM_SOCKETEVENT, TransferBuffer, liCurByteCount,
SKT_SENDPACKET);
end
else
CloseConnection; { Весь файл отправлен, закрыть соединение }
end;
end; { конец ProcessDataSend }
Закрытие соединения осуществляет процедура CloseConnection (при этом на
end; { Создать строку заголовка типа содержимого файла } FileTypeHeader := 'Content-Type: ' + IsFileType + #13#10; end; { конец FileTypeHeader } function TWbServe.FileHeader: String; var IsHeaderStr: String; begin { Вставить все три строки вместе в раздел заголовка сообщения } IsHeaderStr := 'Allow: GET, HEAD' + #13#10; IsHeaderStr := IsHeaderStr + FileSizeHeader + FileTypeHeader; FileHeader := IsHeaderStr; end; { конец FileHeader } Собственно отправка файла клиенту осуществляется процедурой Process- DataSend (если файл чрезмерно велик, придется усложнить процедуру): procedure TWbServe.ProcessDataSend; var liCurByteCount: Integer; IcCurByte: Byte; IpTransferDataPointer: PChar; begin if ibFileOpen then { Запрашиваемый файл открыт ? } begin liCurByteCount := 0; { Инициализировать счетчик байтов } if (not Eof(TransferFile)) then { Мы уже в конце файла?) begin ClearBuffer(TransferBuffer, 8192); { Нет, очистить буфер передачи } { Считать 4’096 байтов из файла в буфер } while ((liCurByteCount < 4096) and (not Eof(TransferFile))) do { цикл по байтам } begin Read(TransferFile, IcCurByte); TransferBuffer[liCurByteCount] := Char(IcCurByte); Inc(liCurByteCount); end; { Отправить клиенту содержимое буфера } NetSocket.SocketSendBuffer(isConnectionSocket, handle, OWM_SOCKETEVENT, TransferBuffer, liCurByteCount, SKT_SENDPACKET); end else CloseConnection; { Весь файл отправлен, закрыть соединение } end; end; { конец ProcessDataSend } Закрытие соединения осуществляет процедура CloseConnection (при этом на - 50 -
Страницы
- « первая
- ‹ предыдущая
- …
- 48
- 49
- 50
- 51
- 52
- …
- следующая ›
- последняя »