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

Вниз

Exception   Найти похожие ветки 

 
markers ©   (2005-11-17 21:10) [0]

Здраствуйте!!!
Где можно перехватить сообщения ESocketError. И выдернуть сообщение которое он хотел сказать. Заранее спасибо!


 
Джо ©   (2005-11-17 21:22) [1]


> Где можно перехватить сообщения ESocketError.

В обработчике except, разумеется.

> И выдернуть сообщение которое он хотел сказать. Заранее
> спасибо!


 try
   ...
 except
   on E: ESocketError do
     ShowMessage(E.Message);
 end;


 
markers ©   (2005-11-17 21:28) [2]

Да это я знаю мой вот:
  try
   ClientSocket.Host:=PChar(Adress);
   ClientSocket.Port:=StrToInt(Port);
   ClientSocket.Active:=True;
  except
   on ESocketError: Exception do MessageBox(Handle,PChar(ESocketError.Message),"ERROR",16);
  end;

Но он не обрабатываеться.... В том то и дело


 
markers ©   (2005-11-17 21:29) [3]

И когда сообщения посылаю тоже проверяю и всё-равно не ловиться.....


 
Джо ©   (2005-11-17 21:31) [4]


>  [3] markers ©   (17.11.05 21:29)
> И когда сообщения посылаю тоже проверяю и всё-равно не ловиться.....

Какое-такое "сообщение"?! Ты ведь об исключениях и их обработчиках говоришь.


 
Джо ©   (2005-11-17 21:32) [5]


> Но он не обрабатываеться....

Что значит - "не обрабатывается"? Откуда такие сведения?


 
markers ©   (2005-11-17 21:36) [6]

У меня при нажатии на кнопку происходит присвоение портов и адресов и делаеться ClientSocket.Active:=True, потом посылаеться сообщение "Hello" и так далее, дак вот я прописывал трайэксцепт и там и там, и всё-равно срабатывало только "стандарный" обработчик исключений.... Вот по этому и спрашиваю....


 
Джо ©   (2005-11-17 22:10) [7]


> и всё-равно срабатывало только "стандарный" обработчик исключений

Поставь точку останова на строке on ESocketError... и убедись, что при исключении управление передается на эту строку. Если не передается, то убедись, что возбуждается именно исключение типа ESocketError.


 
Джо ©   (2005-11-17 22:15) [8]

А, еще возможно, ты невнимательно прочитал диалоговое окно стандартного обработчика. Там написано "Use Step or Run to continue".


 
markers ©   (2005-11-17 22:21) [9]

У меня не совсем стандартный обработчик, у меня EurekaLog


 
markers ©   (2005-11-17 22:21) [10]

Но енто не оно....


 
markers ©   (2005-11-17 22:23) [11]

Точку ставил не работает в тех местах...... У меня код вообще рабочий я просто хочу вылавливать обращения к несуществующему адресу...


 
Джо ©   (2005-11-17 22:41) [12]


>  [9] markers ©   (17.11.05 22:21)
> У меня не совсем стандартный обработчик, у меня EurekaLog

Всплывают все новые и новые подробности... Точнее, они не всплывают, их приходиться тянуть клещами :))
---
Что в докумментации по этой EurekaLog пишут, читал? Может, снеси эту штуку, да попробуй пользоваться стандартными средствами, глядишь - проблема и исчезнет.


 
markers ©   (2005-11-17 22:43) [13]

Всё проблема решена, она была в ClientType:=ctNotBlocking, что кстати это решает?


 
markers ©   (2005-11-17 22:44) [14]

Этот режим на что влияет?


 
Джо ©   (2005-11-17 22:48) [15]


>  [13] markers ©   (17.11.05 22:43)
> Всё проблема решена, она была в ClientType:=ctNotBlocking,
> что кстати это решает?

И причем здесь это к обработке исключений?


 
markers ©   (2005-11-17 23:16) [16]

Обсалютно не знаю, но сие реально помогло..... Сообщения стали ловиться (Ничего кроме этого не менял) Может просто глюк был....


 
Digitman ©   (2005-11-18 08:20) [17]


> markers ©   (17.11.05 22:44) [14]
> Этот режим на что влияет?


на синхронность выполнения транспортных алгоритмов компонента


 
sniknik ©   (2005-11-18 08:41) [18]

> Может просто глюк был....
не глюк. асинхронность это такая штука, когда ты по open/activate только даеш компоненту команду на выполнение... команду он принял, ок, выполнение в твоем коде пошло дальше, а компонент в тоже время в отдельном потоке пытается выполнить полученную команду на открытие. (уже вне твоего блока, да и потока тоже)
поставив несинхронное выполнение ты стал ждать результата выполнения действия по команде, а не только самой команды. поэтому и дожидаешся ошибок.
несинхронные надо ловить в событиях компонента/подключения. (незнаю как в твоем EurekaLog-е, но вот к примеру в ADODataset на onFetchComplete передается параметром и Error: Error; т.е. если асинхронное получение данных завершится ошибкой то она там и будет, на завершении команды в передаваемом Error)


 
markers ©   (2005-11-18 09:58) [19]

Да у Socket есть событие Error, но там его невозможно перекрыть, что мне необходимо! И как мне поступить?


 
markers ©   (2005-11-18 09:58) [20]

EurekaLog просто перекрывает стандартный оброботчик событь и всё, своего он ничего не добавляет...


 
markers ©   (2005-11-18 10:03) [21]

А если я в этом обработчике Raise подниму, поможет?


 
Digitman ©   (2005-11-18 10:10) [22]


> у Socket есть событие Error, но там его невозможно перекрыть


термин "перекрыть" применим только к виртуальным методы класса-предка.
исключения тоже не "перекрывают", а перехватывают и обрабатывают.

событие не является методом, событие это событие - с т.з. класса, потенциально способного возбуждать его, событие есть св-во типа TMethod.

что же касается конкретно события TClientSocket.OnError, то в справке к нему черным по белому написано :

Occurs when the socket fails in making, using, or shutting down a connection.
..

Description

Write an OnError event handler to respond to errors that arise with the socket connection. Set the ErrorCode parameter to 0 if the OnError event handler successfully deals with the error condition, to prevent an ESocketError from being raised.


 
markers ©   (2005-11-18 10:14) [23]

Ну я сделал так
try
raise ESocketError.Create("SocketError");
Sayed:=False;
ServerConnected:=False;
ServerConnectedFull:=False;
ClientSocket.Socket.SendText("BYE");
ClientSocket.Active:=False;
LogingAction("Произошла ошибка в работе программы в сети ошибка номер: "+IntToStr(ErrorCode)+" Сообщение об ошибке: ",High,Inf_Error);
except
on ESocketError: Exception do Information("КРИТИЧЕСКАЯ ОШИБКА!!!"+#13#10+ESocketError.Message,Inf_Error,5);
end;
Он ловит её, но всё-равно потом идёт стандартная ошибка.


 
markers ©   (2005-11-18 10:17) [24]

Всё разобрался! Спасибо!:)


 
markers ©   (2005-11-18 11:09) [25]

А где можно взять стандартные сообщения об ошибках? (Которые винда генерит)


 
Digitman ©   (2005-11-18 11:12) [26]

А зачем они тебе ?
Дл анализа и принятия решений достаточно иметь ErrorCode

К тому же те сообщения, которые ты видишь при ошибках в TClientSocket, генерирует восве не "винда", а сам компонент


 
markers ©   (2005-11-18 11:12) [27]

SysErrorMessage :) Уже сделал! Ещё раз спасибо!


 
markers ©   (2005-11-18 11:13) [28]

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


 
markers ©   (2005-11-18 11:15) [29]

Кусок кода
     else raise ESocketError.CreateResFmt(@sWindowsSocketError{Эта строчка в consts.pas прописана},
       [SysErrorMessage(Result){Сообшение об ошибки из винды}, Result, Op]);


 
Digitman ©   (2005-11-18 11:40) [30]


> markers


на SysErrorMessage() в случае Winsock надеяться не следует, да и подробностей в таких сообщениях нет

что толку от сообщения типа "Async operation failed" ?

и без него понятно, что отказ вызвал именно асинхронный вызов такой-то ф-ции ..

а вот ErrorCode как раз и дает детальную инф-цию о причинах отказа


 
markers ©   (2005-11-18 13:58) [31]

В ErrorCode содержиться цифра ошибки, по которой я и получаю сообщение из винды, а что мне ещё нужно? Мне просто нужно показать собственную мессагу с сообщением об ошике, и произвести пару манипуляций...... Я конечно по начулу прописывал на ErrorEvent, собственные мессаги, но мне это показалось не особо идеальным...... Кстати, что можно поделать, когда хост не найден, а потом подключаешься когда он уже есть, всё-равно даёт ошибку (После Error`а я делаю ClientSocket.Active:=False)....


 
Digitman ©   (2005-11-18 14:16) [32]


> В ErrorCode содержиться цифра ошибки


не "цифра", а число. Разницу понимаешь ?


> то мне ещё нужно?


тебе нужно проанализировать код ошибки и по результатам этого анализа уже предпринимать дальнейшие алгоритмические действия, которые НАПРЯМУЮ зависят от того, ЧТО на самом деле явилось причиной отказа.


> что можно поделать, когда хост не найден, а потом подключаешься
> когда он уже есть, всё-равно даёт ошибку


procedure TForm1.ClientSocket1Error(..);
begin
 ErrorCode := 0;
 Socket.Close; //!!
..
end;


 
markers ©   (2005-11-18 14:46) [33]

Всё спасибо большое, теперь понял..... В том плане если сильно критическая ошибка закрывать сокет, а если не то дальше работать например, так?


 
Digitman ©   (2005-11-18 15:04) [34]


> если сильно критическая ошибка закрывать сокет, а если не
> то дальше работать например, так?


ну такие ошибки, как правило, критические ..

например, ошибка недоступности хоста (при попытке коннекта) или неожиданного "прерывания связи" с ним (при уже установленном ранее с ним коннекте)



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

Форум: "Начинающим";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.055 c
6-1124950549
yasny
2005-08-25 10:15
2005.12.04
TIdSMTP получение поддтверждения о доставке


2-1131961020
john_mag
2005-11-14 12:37
2005.12.04
convert type


14-1132210328
Ega23
2005-11-17 09:52
2005.12.04
С днем рождения! 17 ноября


14-1131596363
Silvestr
2005-11-10 07:19
2005.12.04
Нежен компонент для вывода списка всего оборудования


2-1132240647
DillerXX
2005-11-17 18:17
2005.12.04
Скажите как узнать Handle консольного приложения





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский