Показать сообщение отдельно
  #1  
Старый 13.08.2016, 10:20
arman4587 arman4587 вне форума
Прохожий
 
Регистрация: 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-ов висит
Ответить с цитированием