Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


dmur ©   (2001-09-24 20:58:00) 

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


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

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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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

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


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

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


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо