Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.08;
Скачать: [xml.tar.bz2];




Вниз

Перехват ошибок при соединении с помощью сокетов 


dmur   (2001-09-24 20:58) [0]

Извините за ламерский вопрос, но никак не могу разобраться.
Есть две программы - одна клиент другая сервер.
Сервер ждет подсоединения от клиента.
Надо сделать так, чтобы не возникало исключений при любых ситуациях как с сервером, так и с клиентом.



Digitman   (2001-09-25 10:39) [1]

Приводи конкретную ситуацию - получишь рекомендации. Не книгу же тебе здесь писать об этом ? Ведь море различных исключений может возникать !



dmur   (2001-09-25 11:16) [2]

Ну так уж и книгу!
Имеются ввиду только сокетные исключения.
Например, клиент коннектится к серверу, но на компьютере с прогой-сервером, эта прога не запущена. Возникает исключение:
ESocketError Asynchronous socket error 10061
С помощью try ... Except on ESocketError do...
оно не перехватывается.
Или сервер зависает, клиент зависает.
В большинстве случаев генерятся подобные не перехватываемые исключения.
Как от них избавится?



Digitman   (2001-09-25 11:48) [3]

а ты хоть раз в модуль, где реализован TClientSocket, сподобился заглянуть и разобраться в этом детально ? Прежде чем утверждать, что "только сокетное исключение" всего одно ?

По поводу "перехватывается-не перехватывается", "виснет - не виснет" :
Ловить сию оказию нужно либо в Application.OnException либо в OnSocketError. А почему - загляни-не поленись в ScktComp. Да и в форуме эта проблема уже "разжевывалась" мной неоднократно....



Коляныч   (2001-09-25 12:10) [4]

Правильно! Кнопку F1 надо уметь самому нажимать!
И либо используй блокирующие сокеты с обработчиком try... except или неблокирующие и пиши обработчик OnSocketError.



Digitman   (2001-09-25 13:05) [5]

>dmur
Во как <Коляныч> мигом поставил все на свои места !) Кратко и внятно ! Оч.своевременный комментарий по сабжу ))



[N\A]   (2001-09-26 17:56) [6]

или свой обрабочик исключений =) а нем Label1.caption:= E.Message;



Wizard_Ex   (2001-09-27 17:37) [7]

Перехватить ошибки ClientSocket можно присвоив в событии OnError ErrorCode:=0
тогда никаких диалогов и сообщений не будет, а ты делай все что твоей душе угодно, НО
есть НО:
если Хост, который указан не существует или этот компьютер выключен (тот комп где ServerSocket), то возникает единственная ошибочка, которая этими средствами не перехватывается.
Вот относительно последнего меня интересует как от этого избавится попроще.
Заранее спасибо за совет...



Wizard_Ex   (2001-09-27 17:39) [8]

Имеется ввиду что программа будет реагировать тихо на ошибочки если ErrorCode:=0



Коляныч   (2001-09-27 19:30) [9]

Это какже такое может что подобная ошибка не перехватывается?
Эта ошибка имеет код 10060 который и получает обработчик
Конечно подобная ошибка может возникать и в др. случаях.
(10060 = Connection timed out.)



dmur   (2001-09-28 22:38) [10]

С ErrorCode:=0 отлично работает!
Если же поставить ctNonBlocking, то программе становится наплевать и на отсутствие сервера и на отсутствие компа с данным адресом.
Спасибо Wizard_Ex - единственный дельный и не заумный ответ!!!



Wizard_Ex   (2001-09-30 14:47) [11]

Пожалуйста.
просто я тоже маленько помучился в свое время с этим...



Wizard_Ex   (2001-10-05 12:35) [12]

To Коляныч:
При ErrorCode:=0, если хост не существует все равно выводится сообщение такого типа:

Windows socket error: этот хост неизвестен(11001), on API "ASync Lookup"




Форум: "Сети";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.08;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.03 c
14-22327          fliz                  2001-11-05 15:39  2002.01.08  
а говорят послезавтра праздник?


3-21994           Vs                    2001-12-06 16:23  2002.01.08  
Dynamic Array


14-22402          Darker                2001-11-08 12:26  2002.01.08  
Ищу человека с ником


14-22388          Merlin                2001-11-08 11:43  2002.01.08  
Очередная грязь в кладовке


14-22325          Olgerd                2001-11-04 19:05  2002.01.08  
Рассылка