Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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"



Страницы: 1 вся ветка

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

Наверх















Память: 0.86 MB
Время: 0.036 c
1-22111
Кто нибудь делал?
2001-12-14 08:12
2002.01.08
Создать выпадающий список в StringGride, типа Lookup в DBGride


3-21982
Dush
2001-12-06 12:37
2002.01.08
Подключение клиента к базе


14-22326
McSimm
2001-11-04 11:35
2002.01.08
Кто-то хотел размять (себе) мозги? Какие будут варианты алгоритма?


1-22081
Andrewv
2001-12-18 14:14
2002.01.08
Как вызвать системную ошибку.


1-22232
T2
2001-12-16 07:24
2002.01.08
WIN386.SWP





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