Текущий архив: 2003.07.31;
Скачать: CL | DM;
ВнизПереслать файл без TfileStream Найти похожие ветки
← →
Beregin (2003-05-25 16:13) [0]Использую TServerSocket и TClientSocket. Необходимо считывать файл по куска (каждый считанный кусок шифровать – но это к делу не относиться) и пересылать каждый кусок на сервер. Поэтому пересылать как файловый поток не могу (или не прав?)
На стороне клиента делаю:
var ln: Integer;
data: PByte;
inFile file;
begin
ln:=512;
AssignFile(inFile, "test.rar");
reset(inFile, 1);
GetMem(data, ln);
while not eof(inFile) do
begin
BlockRead(inFile, data^, 512, ln);
ClientSoket.Socket.SendBuf(data^,ln);
end;
FreeMem(data);
CloseFile(inFile);
End;
На сервере в событие ClientRead ловлю:
var ln: Integer;
buf: PChar;
src : TFileStream;
begin
ln := Socket.ReceiveLength;
GetMem(buf,ln);
Socket.ReceiveBuf(buf^,ln);
src := TFileStream.Create("test.rar",fmOpenReadWrite);
src.Seek(0,soFromEnd);
src.WriteBuffer(buf^,ln);
src.Free;
FreeMem(buf);
end;
Но приходит только первые 30-60 килобайт. Притом каждый раз по разному – и не понятно от чего зависит. И где у меня руки кривые? Помогите люди добрые.
← →
Digitman (2003-05-26 09:18) [1]1. TClientSoket.ClientType = ctNonBlocking или ctBlocking ?
2. SendBuf() - это функция ! А функция, как известно, возвращает результат. Где анализ результата ее выполнения ?
3. ln := Socket.ReceiveLength;
А если в результате выполнения этой строчки ln = 0 ? Каков тогда смысл дальнейших действий ?
4. Где обработка исключений в теле OnClientRead()
5. Если TClientSoket.ClientType = ctNonBlocking, то - где обработка события OnWrite() ?
Страницы: 1 вся ветка
Текущий архив: 2003.07.31;
Скачать: CL | DM;
Память: 0.44 MB
Время: 0.007 c