Форум: "Сети";
Поиск по всему сайту: 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.74 MB
Время: 0.032 c
1-22255           Дмитрий Катаев        2001-12-14 14:51  2002.01.08  
Как внедрить новый пункт меню в IE, который вызывается по правой кнопке (как у Reget, например)


1-22212           T2                    2001-12-14 03:13  2002.01.08  
MMTOOLS CRACK


1-22033           voronkov              2001-12-18 12:27  2002.01.08  
Как заставить TEdit не генерить звуковой сигнал при включенном обработчике нажатий клавиш.


1-22038           Дима~                 2001-12-18 17:53  2002.01.08  
Каким образом передать в запускаемый файл командную строку?


1-22146           Mikle                 2001-12-19 17:19  2002.01.08  
Глюки при печати на матричный принтер