Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
3-39962
Мишутка
2002-05-21 18:03
2002.06.13
Срочно!!!!!!!!!!!


3-39940
SkyWalker
2002-05-20 13:17
2002.06.13
ADO


3-39970
BoBka
2002-05-22 06:44
2002.06.13
DBGrid1.Options???


3-39942
com6
2002-05-19 09:55
2002.06.13
Мастера, помогите выбрать БД


7-40189
pvn
2002-03-14 16:44
2002.06.13
управление samsung er-4615R





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