Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.10.21;
Скачать: [xml.tar.bz2];

Вниз

Обработка исключений в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.053 c
2-1191265539
Farel
2007-10-01 23:05
2007.10.21
Blob


2-1191037024
Washington
2007-09-29 07:37
2007.10.21
Вызов процедуры


15-1190118818
Шёлк
2007-09-18 16:33
2007.10.21
Тема о калькуляторе


15-1190403271
korneley
2007-09-21 23:34
2007.10.21
Отсутствуют "Последние 10 сообщений на форумах"


8-1168236355
andr1962
2007-01-08 09:05
2007.10.21
Снежинка Коха





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский