Форум: "Начинающим";
Текущий архив: 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.04 c