|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Поймать ошибку во время передачи при обрыве связи
Всем привет. Народ, подскажите как поймать ошибку при обрыве связи, во время приема файла от клиента на сервер?
Код:
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-ов висит |
#2
|
||||
|
||||
Функция с ошибкой возвратится.
Пишу программы за еду. __________________ |
#3
|
|||
|
|||
Цитата:
|
#4
|
||||
|
||||
Цитата:
Пишу программы за еду. __________________ |