Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.21;
Скачать: CL | DM;

Вниз

Обработка исключений в TSocketConnection   Найти похожие ветки 

 
R.O.O.T ©   (2007-09-25 17:20) [0]

Господа подскажите, как обрабатывать исключения (чтоб непявлялись сообщения о ошибках) в TSocketConnection а именно при разврыве связи сервером
появляется ошибка "error read from socket"  в сокетах в событии OnError  обычно ставится Error:=0 но в данном компаненте нет события...
как быть???


 
Сергей М. ©   (2007-09-25 17:34) [1]


> как быть?


заключать работу с TSocketConnection в try ..except


 
Сергей М. ©   (2007-09-25 17:37) [2]

Собственно обработка исключений этого объекта ничем не отличается от обработки исключений любого другого дельфийского объекта - тот же try .. except


 
r.o.o.t ©   (2007-09-25 17:52) [3]

нет
это понятно
но допустим я невызываю методы и свойства данного компанента
я говорю о ситуации если сервер рвет подключение то
exeption  происходит в
StreamedConnection = class(TDispatchConnection, ISendDataBlock)
 private
   FRefCount: Integer;
   FHandle: THandle;
   FTransport: TTransportThread;
   FTransIntf: ITransport;
   FInterpreter: TCustomDataBlockInterpreter;
   FSupportCallbacks: Boolean;
   FInterceptGUID: TGUID;
   FInterceptName: string;
   function GetHandle: THandle;
   procedure TransportTerminated(Sender: TObject);
   procedure SetSupportCallbacks(Value: Boolean);
   procedure SetInterceptName(const Value: string);
   function GetInterceptGUID: string;
   procedure SetInterceptGUID(const Value: string);
 protected
   { IUnknown }
   function QueryInterface(const IID: TGUID; out Obj): HResult; reintroduce; stdcall;
   function _AddRef: Integer; stdcall;
   function _Release: Integer; stdcall;
   { ISendDataBlock }
   function Send(const Data: IDataBlock; WaitForResult: Boolean): IDataBlock; stdcall;

   procedure InternalOpen; virtual;
   procedure InternalClose; virtual;

   procedure ThreadReceivedStream(var Message: TMessage); message THREAD_RECEIVEDSTREAM;
   procedure ThreadException(var Message: TMessage); message THREAD_EXCEPTION;
   procedure WndProc(var Message: TMessage);
   function CreateTransport: ITransport; virtual;
   procedure DoConnect; override;
   procedure DoDisconnect; override;
   procedure DoError(E: Exception); virtual;

   function GetInterpreter: TCustomDataBlockInterpreter; virtual;

   property Interpreter: TCustomDataBlockInterpreter read GetInterpreter;
   property Handle: THandle read GetHandle;
   property SupportCallbacks: Boolean read FSupportCallbacks write SetSupportCallbacks default True;
   property InterceptGUID: string read GetInterceptGUID write SetInterceptGUID;
   property InterceptName: string read FInterceptName write SetInterceptName;
 public
   function GetInterceptorList: OleVariant; virtual;
   function GetServerList: OleVariant; override;
   constructor Create(AOwner: TComponent); override;
   destructor Destroy; override;
 end;

>>  procedure DoError(E: Exception); virtual;

выдает ошибку

как быть


 
Сергей М. ©   (2007-09-26 08:17) [4]

К чему ты привел этот шматок кода ?

Ты свой код приведи, а не борландовский)


 
r.o.o.t ©   (2007-09-26 10:01) [5]

дык я и говорю что при разрыве связи програма нече неделает как обрабаотать исключение о разрыве свзяи


 
Сергей М. ©   (2007-09-26 10:19) [6]


> при разрыве связи програма нече неделает


Как это "нече неделает" ? Спит что ли сном богатырским ?)


> как обрабаотать исключение о разрыве свзяи


Да как хочешь, так и обработай. Откуда мне знать, что тебе нужно выполнить в контексте этой обработки ?


 
r.o.o.t ©   (2007-09-26 10:22) [7]

епрст

прогармма подключена к серверу и держит подключение допустим сервер рвет подключения на стороне клиента появляется ошибка
как ее обработать чтоб непоявлялось это сообшение??


 
Сергей М. ©   (2007-09-26 10:30) [8]

а-а-а ... вон ты о чем) ..

Ну дык оно проще пареной репы :

try
.. работа с SocketConnection ..
except
end;


 
r.o.o.t ©   (2007-09-26 10:39) [9]

да не об этом яяяя
ты мне инспектируешь код
если я обращаюсь к методам сервера со стороны клиента
я говорю о том что клиент подключился к серверу и просто проставиват по
истечению двух часов сервер разрывает сам подключение на стороне клиента генерится ошибка и отображается на экране как обрабаоть это исключения в сокетах
это делается так
procedure TfrMain.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
 ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
 ErrorCode:=0;
end;

как это сделать в TSocketConnection в нем нет событя OnError но есть класс наследник

StreamedConnection = class(TDispatchConnection, ISendDataBlock)
.......
  procedure DoError(E: Exception); virtual;
.........

в котором происходит непосредсвенная реализация передача вызовов к серверу MIDAS или MTS в котором все это и происходит
как мне туда долесть и обработать исключение


 
Сергей М. ©   (2007-09-26 10:52) [10]


> как мне туда долесть


Зачем туда "лесть" ?
Уверяю тебя - неча тебе там делать, тем паче с такими скудными знаниями)

Если ты не знаешь, с какой стороны подступиться к обработке исключений, поступай проще и не заморачивай себе голову, бо натворишь там делов - долго расхлебывать потом придется)

"Проще" - это глобальная обработка необработанных исключений на уровне приложения в целом. Для этого у объекта Application есть событие OnExeception, обработать которое в твоем случае можно примерно так:

if not E is ESocketConnectionError then
 Application.ShowException(E);


 
r.o.o.t ©   (2007-09-26 11:25) [11]

а гдеж их мне подчерпать??
мои скудные знания


 
r.o.o.t ©   (2007-09-26 11:27) [12]

if not E is ESocketConnectionError then
Application.ShowException(E);

куда писать этот код??


 
Сергей М. ©   (2007-09-26 11:50) [13]


> гдеж их мне подчерпать?


Вестимо где - в книгах)


> куда писать этот код?


Ты по-русски вообще понимаешь ?


> у объекта Application есть событие OnExeception


 
r.o.o.t ©   (2007-09-26 11:53) [14]

не
эт понятно в книгах
авторов плиз в студию книг

да понял яяяя


 
Сергей М. ©   (2007-09-26 11:55) [15]


> авторов плиз в студию книг
>


Это уже другая история)

Вопрошай в "Прочее", там тебе полную котомку авторов отгребут)


 
r.o.o.t ©   (2007-09-26 12:05) [16]

спасибо за наставления


 
Dmitro ©   (2007-09-26 21:58) [17]

Можно тупо переписать ScktComp.pas и убрать оттуда все, что раздражает. Когда-то я так делал...:)


 
Сергей М. ©   (2007-09-27 08:08) [18]


> Dmitro ©   (26.09.07 21:58) [17]


TSocketConnection и TClientSocket - вовсе не одно и тоже, и находятся эти компоненты в совершенно разных юнитах.



Страницы: 1 вся ветка

Текущий архив: 2007.10.21;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.022 c
2-1191116003
trigger
2007-09-30 05:33
2007.10.21
данные за последние 5 минут


2-1190788195
Alex7
2007-09-26 10:29
2007.10.21
Как обработать одно Field (DateTime) в двух Column Date и Time


2-1190619662
F@T@L_Err0r
2007-09-24 11:41
2007.10.21
TrackBar


2-1191224656
Lexx1
2007-10-01 11:44
2007.10.21
.ini не создается(


11-1173964445
vampir_infernal
2007-03-15 16:14
2007.10.21
InputBox?