13.08.2016, 10:20
|
Прохожий
|
|
Регистрация: 30.12.2015
Сообщения: 2
Версия Delphi: Delphi xe7
Репутация: 10
|
|
Поймать ошибку во время передачи при обрыве связи
Всем привет. Народ, подскажите как поймать ошибку при обрыве связи, во время приема файла от клиента на сервер?
Код:
var _FileName:WideString;
_FileSize:Cardinal;
_Client:LongInt;
_BufSize: Integer;
_Buffer: PChar;
_Dummy: Cardinal;
begin
if _Receiver then begin
try
_BufSize:=Socket.ReceiveLength;
_Buffer:=GetMemory(_BufSize);
try
_BufSize:=Socket.ReceiveBuf(_Buffer^, _BufSize);
WriteFile(FPipeWrite, _Buffer^, _BufSize, _Dummy, nil);
finally
FreeMemory(_Buffer);
end;
repeat
_BufSize:=GetFileSize(FPipeRead, nil);
if _BufSize = 0 then Break;
if FDataLen=0 then
begin
if _BufSize<SizeOf(DWORD) then Break;
ReadFile(FPipeRead, FDataLen, SizeOf(DWORD), _Dummy, nil);
FDataRead:=0;
FFileStream:=TFileStream.Create(_Out+_Tmp+'fc.zip', fmCreate);
end else
begin
_Buffer:=GetMemory(_BufSize);
try
ReadFile(FPipeRead, _Buffer^, _BufSize, _Dummy, nil);
FFileStream.Write(_Buffer^, _BufSize);
Inc(FDataRead, _BufSize);
finally
FreeMemory(_Buffer);
end;
end;
until
FDataRead = FDataLen;
if FDataRead = FDataLen then begin
FFileStream.Free;
FDataLen:=0;
Jornal('ok',Unassigned,clRed);
_Receiver:=False;
end;
except
on e:Exception do begin
_Receiver:=False;
FFileStream.Free;
FDataLen:=0;
Socket.Destroy;
Jornal(e.Message+' : '+e.ClassName,Unassigned,clRed);
end;
end;
try except не ловит из за Break-ов. а без break-ов висит
|