![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]И все же кто знает?