Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.013 c
6-100859
Миша
2003-05-22 22:42
2003.07.31
Запуск программы в сети


1-100772
Alex-21
2003-07-15 20:41
2003.07.31
Ctrl+любая клавиша


14-100967
pet
2003-07-13 18:36
2003.07.31
иконки


14-100933
DimaB
2003-07-14 06:04
2003.07.31
Digital Metaphors - ReportBuilder v7.02 Server (Delphi 7)


3-100641
XanderMan
2003-07-10 16:09
2003.07.31
Oracle Server и Client на одной машине




   Наверх