Форум: "Сети";
Текущий архив: 2002.06.13;
Скачать: [xml.tar.bz2];
ВнизNo ERRORS Найти похожие ветки
← →
ATLANTIDO (2002-04-02 00:24) [0]Возможно в Delphi сделать так, чтобы не выскакивали сообщения
об ошибках (например ошибки сокетов)? Т.е. интересует не то,
как обробатывать конкретную ошибку, а просто сделать так,
чтобы не появлялись эти дурацкие окна ?
← →
Lego (2002-04-02 02:09) [1]Вроде в примере чата(D5) видел что-то подобное в событии OnError > Error := 0;
может ошибаюсь...
← →
EveryonE (2002-04-02 07:35) [2]надо обрабатывать исключительные ситуации. про них много написано, надо тока поискать. делается это так Application.OnException := ABC; ABC - процедура которая выполняется при ошибке. так же не забывай про try except finnaly.
← →
EveryonE (2002-04-02 07:39) [3]В сокетах есть свой onError но он не всегда срабатывает, т.е. если ты обрабатываешь сокетовое сообщение в котором происходит какая нить ошибка (при работе с памятью например).
← →
Song (2002-04-02 08:54) [4]По-моему достаточно забить эту ошибку в нужном месте:
try
// Здесь делаем нужные Вам действия с сокетами
except
end;
← →
McSimm (2002-04-02 11:13) [5]Если же надо запретить появление сообщений об ошибке при запуске из-под Делфи, надо в Debuger Options в закладке Language Exceptions добавить тип исключения к списку Ignore - это выборочно. Или снять флажок Stop on Delphi Exceptions - для всех
← →
ATLANTIDO (2002-04-02 15:53) [6]Видимо я плохо задал вопрос. Обьясняю конкретно, в чем проблема.
Я скомпилировал свое приложение, уже есть готовый работающий
exe-шник. Но, бывают ситуации, когда выскакивают всякие ошибки.
Одна из них - при попытке соединения сокетом (редко). Но я ошибку коннекта обрабатываю всеми известными методами : и
errorcode:=0, try..., короче говоря, мне не надо обрабатывать ошибку, мне надо чтобы эти дурацкие окна не появлялись.
>
> EveryonE (02.04.02 07:35)
> надо обрабатывать исключительные ситуации. про них много
> написано, надо тока поискать. делается это так Application.OnException
> := ABC; ABC - процедура которая выполняется при ошибке.
>
Т.е. если я сделаю выше сказаное, а процедура ABC будет выглядеть
так :
procedure ABC;
begin
end;
то эти окна не будут появляться ?
← →
Song (2002-04-02 16:00) [7]А "эти дурацкие окна" не будут появляться, если не допускать ошибок или умело забить критические участки программы в состав исключений.
← →
ATLANTIDO (2002-04-02 16:12) [8]
> Song © (02.04.02 16:00)
> А "эти дурацкие окна" не будут появляться, если не допускать
> ошибок или умело забить критические участки программы в
> состав исключений.
Если в идеале то согласен. Но знашь ли ты как решить ту же проблему с коннетом ??? Я решал ее всеми известными в форуме методами (ветка "сети"). Ты знаешь, ошибки перестали возникать !
Но уже через пару недель окна опять начали появляться :(
Как можно не допустить ошибки , которая по условиям программы должна быть (например сканер портов) ?
← →
panov (2002-04-02 16:19) [9]Вопрос по сетям.
При ошибках работы сокетов возбуждается событие типа Lego © (02.04.02 02:09)
Там же и указан метод обработки и подавления сообщений.(Error:=0).
Использовани секций try... except... end в данном случае не решает проблем.
← →
Digitman (2002-04-02 16:32) [10]чтобы "дурацкие окна" не появлялись, бери класс TCustomSocket, наследуй его и реализуй собственную машину состояния гнезда
← →
ATLANTIDO (2002-04-02 16:49) [11]
> При ошибках работы сокетов возбуждается событие типа Lego
> © (02.04.02 02:09)
>
> Там же и указан метод обработки и подавления сообщений.(Error:=0).
Я именно так и делал
← →
mikki (2002-04-02 18:16) [12]как вариант: ошибка вылезает при попытке соединиться, если клиентсокет без блокировки, а сервер не стоит на прослушке, то
"Asynchronous socket error 10061" И никакие обработки не помогают:( Точнее они отрабатываются, но и эта ошибка лезет. Как вариант(довольно корявый) соединиться сначала с блокировкой(тут только обработчик except сработает) и при удачной попытке разорвать связь и затем соединиться без блокировки.Хотя чувствую должно быть более лаконичное решение.
← →
ATLANTIDO (2002-04-02 18:47) [13]что такое блокировка ?
← →
Erik Ivanov (2002-04-02 19:39) [14]Можно использовать Indy. Недавно сделал сервер на UDP притензий пока не имею, мне кожется это очень удобное решение когда нужна надежность.
← →
Song (2002-04-02 20:58) [15]Не знаю, у меня получается обходить через except. Вот алгоритм:
1.Задаём значения для port и host
try
2.Открываем сокет
3.Ждём пока откроется
4.Посылаем
5.Закрываем
except
end;
Как видите, ошибка на любой стадии приведёт к возникновению исключительной ситуации, и except её благополучно обработает.
← →
ATLANTIDO (2002-04-02 23:29) [16]цикл
repeat
until ClientSocket.Active
вешает программу
← →
panov (2002-04-03 07:11) [17]>ATLANTIDO © (02.04.02 23:29)
А тебе что, нужно заблокировать и серверную сторону, кроме клиентской?
← →
EveryonE (2002-04-03 08:07) [18]type TMainForm = class
public
...
procedure MyException(Sender:TObject; E:Exception);
...
...
implementation
{-----}
...
{-----}
procedure TMainForm.MyException(Sender:TObject; E:Exception);
begin
ShowMessage("Exception !!!");
end;
где-нить при запуске программы, например TMainForm.onCreate поставь: Application.OnException := MyException;
..... Все, если у тя будет такаия искл. ситуация выведется тока одно окно "Exeption !!!", соответственно если убрать этот ShowMessage, то и этого сообщения не будет.
try
except
finnaly можно использовать когда ты знаешь в каком участке кода у тя может возникнуть ошибка (исключительная ситуация).
← →
Song (2002-04-03 08:42) [19]2ATLANTIDO © (02.04.02 23:29)
И правильно что вешает. Состояние Active не может измениться у компонента TClientScoket, если Вы не даёте своему приложению обрабатывать сообщения.
Такой вариант устранит проблему:
While not ClientSocket1.Active Do Application.ProcessMessages;
← →
Malder (2002-04-04 00:49) [20]Блин. Мож я не туда лезу, но хочу ответить на первоночальный вопрос (хотя ответы на него уже были).
Чтобы не всплывали окна ошибок, нужно обрабатывать эти ошибки. try except не поможет в силу того, что ошибка возникает не при Active:=true (здесь то все Ок), а когда нет отклика от удаленного хоста (то есть по прошествию таймаута). При этом возникает событие OnError, в которое в качестве параметра передается код ошибки Error (или ErrorCode - точно не помню). Нужно проанализировать код ошибки, принять соответствующие меры и присвоить ErrorCode:=0. Тогда окно появляться не будет. Правда в режиме отладки из под Дельфей будет возникать ошибка, тут уже поможет:
McSimm © (02.04.02 11:13)
Если же надо запретить появление сообщений об ошибке при запуске из-под Делфи, надо в Debuger Options в закладке Language Exceptions добавить тип исключения к списку Ignore - это выборочно. Или снять флажок Stop on Delphi Exceptions - для всех
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2002.06.13;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.005 c