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

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

TClientSocket+ClientSocket.Open=Непростой вопрос [D5, Win2k]


hacker ©   (2002-01-04 07:26:00) 

Проблема такая: При Open как и полагается возникает исключение, а не OnError, НО метод, описанный в статье "Программирование сокетов в Дельфи" : Кариха Николая с заключением Open в Try Except не работает, т.к. у меня после открытия возникает первым делом событие OnDisconnect и после него исключение. Так как ловить это исключение?


Wizard_Ex   (2002-01-12 13:30:00) [1]

А если не конопатить юнит, то можно так
Кинь компонент Application Event и в событии OnExepction
напиши типа
if E is ESocketError then ничего не делать

Должно помочь


Hacker   (2002-01-12 05:58:00) [2]

Я переконапатил другом метод ResultCheckSicket(точно не помню, но там же в начале юнита). В Делфи 6 . И убрал там Raise. Они обработчик, который там проверяется не присваивают вроде.

И все хорошо, пока


Vlad____   (2002-01-12 01:48:00) [3]

>panov ©

А вот именно и пробовал, пока не посмотрел исходники сокета. Хотя возможно, что в каком-то из сервиспаков это и пофиксено ( У меня делфи 5 без апдейтов ) а вот и причина ( ScktComp.pas )

procedure TCustomWinSocket.CMLookupComplete(var Message: TCMLookupComplete);
begin
if Message.LookupHandle = FLookupHandle then
begin
FLookupHandle := 0;
if Message.AsyncError <> 0 then
begin
Disconnect(FSocket); // в случае ошибки сразу вываливается соответствующее сообщение а так-как это реакция на мессадж то try except не помогают
raise ESocketError.CreateResFmt(@sWindowsSocketError,
[SysErrorMessage(Message.AsyncError), Message.ASyncError, "ASync Lookup"]);
end;
//---- сдесь код для все ок ---------
end;


ThaDrot   (2002-01-11 14:32:00) [4]

У меня та же проблема с сокетами...
Но в onError при исключении я попадаю. Вопрос :
как сделать так, что-бы после того как я обработал ошибку
в onError среда Delphi не выдавала ошибку ?


panov   (2002-01-11 07:23:00) [5]

>vlad__ (10.01.02 21:05)

А ты попробуй.
У меня не выпадает Exception.


vlad__   (2002-01-10 21:05:00) [6]

Async lookup будет выпадать в любом случае - хоть в ОнЕррор Еррор:=0 хоть в try except. Так уж это у борланда сделано, они не пытаются даже вызывать OnError. А отловить можно через Application.OnException.


Hacker   (2002-01-10 10:35:00) [7]

К сожалению,я не нашел свойство Break On Exception(забыл совсем), но зато я нашел в чем глюк - это TCustomWinSocket виноват - не может нормально сам обработать сообщение о LookUp"e(в прочем моих знаний не хватило чтобы ее понять - как это вместо then вызывается Disconnect - ???)
Решение тривиальное - делать в Delphi 6 - там ошибку исправили.


panov   (2002-01-07 21:21:00) [8]

Уже говорили обэтом.
Отключи свойство Break On Exception в Delphi.
В OnError ErrorCode := 0;

Exception не возникнет.


Hacker   (2002-01-07 20:56:00) [9]

Как никто понять не может, что этот самый OnError не возникает вообще - читайте с начала вопроса


panov   (2002-01-06 23:27:00) [10]

Ошибку тебе все-таки придется обрабатывать в OnError.
Если тебе нужно заново пытаться открыть сокет,
то в OnError пишешь:

ErrorCode := 0; //или обрабатываешь ошибку
ClientSocket.Open;


Hacker   (2002-01-05 14:33:00) [11]

М.. Чего все молчат..


Hacker   (2002-01-04 20:08:00) [12]

Кто-нибудь, помогите


hacker   (2002-01-04 13:13:00) [13]

Код привел,а реплики не слышу..


hacker   (2002-01-04 11:24:00) [14]

Не знаю какое место ты спрашиваешь, это метод моего коннекта(просто в его потомок добавил), хотя такое было и при простом TClientSocket
Ситуация такая: Dial-Up вырублен, по идее это описанная ситуация.

После этого Open"a в часть Except не заходит,а продолжается выполнение как обычно и первым делом возникает Ondisconnect, после исключение ESocketError - "Windows Socket error: этот хост не известен (11001), on API" ASync Lookup"
а если коннект есть то идет как надо - OnConnect

procedure TMyClientSocket.MyConnect(URL: String);
Var sHost, sName: String;
begin
Div_URL(URL, sHost, sName);
Host:=sHost;
HeaderBuf.Add(CurrMethod+" "+sName+" HTTP/1.1");
HeaderBuf.Add("Host: "+sHost);
HeaderBuf.Add("Accept: */*");
HeaderBuf.Add("Referer: http://"+sHost);
// HeaderBuf.Add("Proxy-Connection: Keep-Alive");
If CurrMethod="GET"
then
begin
HeaderBuf.Add("Range: bytes="+IntToStr(BodyRange)+"-");
end;
HeaderBuf.Add("Pragma: no-cache");
HeaderBuf.Add("Cache-Control: no-cache");
HeaderBuf.Add("Connection: close");
HeaderBuf.Add("");
Try
Open;
Except
Здесь чего-нибудь
end;


panov   (2002-01-04 11:02:00) [15]

Приводи код.


hacker   (2002-01-04 10:02:00) [16]

И все же кто знает?


Наверх

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