Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];

Вниз

Socket   Найти похожие ветки 

 
Копосов Н.В.   (2003-11-03 09:45) [0]

Уважаемые мастера! У меня снова вопрос по socket: как мне грамотно обрабатывать ошибки на клиенте, я указываю хост на сервер, а сервер на капремонте(выключен), одним словом как грамотно и в какой процедуре обрабатывать ошибки при соединении.


 
Digitman   (2003-11-03 09:58) [1]


> вопрос по socket


по какому "socket" ? что в твоем понимании есть "socket" ?


 
Копосов Н.В.   (2003-11-03 10:20) [2]

>по какому "socket" ? что в твоем понимании есть "socket" ?
Вопрос не посуществу!


 
Fay   (2003-11-03 10:29) [3]

Не вполне понятен вопрос. Приведите пример безграмотной обработки, pls.


 
Polevi   (2003-11-03 10:30) [4]

это точно


 
Digitman   (2003-11-03 10:35) [5]


> Копосов Н.В


Да что ты говоришь ?! Да неужто ?!

У меня вот, к примеру, есть некий мной написанный класс TMySocketClass = class(TMyAbstractSocket), и у него есть событие OnSocketFailure(), и в обработчике этого события я пишу Sender.CloseConnection.

И это у меня, представь себе, тоже "сокет" !!! И попробуй сказать, что это не так)))... И попробуй спросить, почему, мол, у меня в палитре компонентов нет этого самого "сокета")))


 
Копосов Н.В.   (2003-11-03 12:26) [6]

Открываю сокет
ClientSocket1.open;
а сервер может вообще быть не запущен
и у меня пошли ошибки, номера не помню (~10054 - вроде)мол сервера нет, дак вот эти самые ошибки мне не нужны. Посоветуйте плиз. Может сработать на исключения ошибки, т.е.
try
finally
end;
или
try
except
end;


 
Копосов Н.В.   (2003-11-03 12:30) [7]

Digitman, я понимаю что ты разбираешься лудше других, но ты спустись на землю, если сможешь помоги


 
Digitman   (2003-11-03 12:59) [8]

ClientSocket1.ClientType := ctBlocking;
try
ClientSocket1.open;
except
..ашипка ..
end;


 
Копосов Н.В.   (2003-11-03 14:17) [9]

Спасибо Digitman, но если не достал объясни зачем ClientSocket1.ClientType := ctBlocking;


 
Копосов Н.В.   (2003-11-03 14:32) [10]

Да, пишу всё это прямо на обработчик кнопки

ClientSocket1.ClientType := ctBlocking;
try
ClientSocket1.open;
except
..ашипка ..
end;

Но только не помогает ошибка сокета(10064). Я так понимаю, что надо вместо ..ашипка .. писть что-то грамотнее, помоги если не достал


 
Digitman   (2003-11-03 14:34) [11]

потому что по умолчанию ClientType = ctNonBlocking, и выполнение метода Open в этом режиме приведет к старту асинхронной операции коннекта, после чего метод Open немедленно возвратит управление вызывающему коду. Возвращение управления без возникновения исключения не означает факт установления коннекта либо факт невозможности установления оного.

О факте успешного коннекта компонент известит событием OnConnect

О факте готовности гнезда к передаче данных серверу (как минимум, после успешного коннекта, т.е. вслед за событием OnConnect) компонент известит событием OnWrite

О факте НЕуспешного коннекта компонент известит событием OnError, параметр ErrorCode в обработчике которого укажет на причину отказа. Здесь же, в обработчике OnError, по результатам "собственноручноно" анализа кода причины отказа предпринять последующие действия, зависящие от причины отказа и твоей собственной логики действий в случае той или иной причины.


 
Копосов Н.В.   (2003-11-03 14:36) [12]

извинbте 10061


 
Digitman   (2003-11-03 14:38) [13]


> Но только не помогает ошибка сокета(10064). Я так понимаю,
> что надо вместо ..ашипка .. писть что-то грамотнее


все зависит от той алгоритмической логики, которую ты хочешь реализовать как реакцию на данную ситуацию ... я что, еще и логику должен за тебя придумывать ?) ... Ну нет сервера и нет его, откуда ему взяться ? он, предположим, действительно неактивен в данный момент ... дальше что тебе нужно ? твои предполагаемые действия как разработчика алгоритма ?


 
Копосов Н.В.   (2003-11-03 14:45) [14]

Нет алгоритмы мне не надо, пишу в
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
exit;
end;
тобишь ваще не реагировать на ошибки, а ему по барабану.


 
Digitman   (2003-11-03 15:10) [15]

клавишу F1 знаешь ?

если не знаешь, то поставь курсор мыши на поле инспектора объектов, в котором назначается обработчик данного события, найди на клавиатуре F1, надави ее и увидишь :

Occurs when the socket fails in making, using, or shutting down a connection.

property OnError: TSocketErrorEvent;

Description

Write an OnError event handler to respond to errors that arise with the socket connection. Set the ErrorCode parameter to 0 if the OnError event handler successfully deals with the error condition, to prevent an ESocketError from being raised.

не для Пушкина, между прочем, писано)

procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ErroCode := 0;
Socket.Close;
end;


> Нет алгоритмы мне не надо


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


 
Копосов Н.В.   (2003-11-03 15:37) [16]

Увидел это
ErroCode := 0;
Socket.Close;
подумал ты гений, но ошибка не изчезла


 
Копосов Н.В.   (2003-11-03 15:43) [17]

Знаю что ты за Delphi сидишь, глянь

procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket2.ClientType := ctBlocking;
ClientSocket2.Address:="127.0.0.1";
ClientSocket2.port:=5555;
try
ClientSocket2.open;
except
form1.Caption:="no";
end;
end;

procedure TForm1.ClientSocket2Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ErrorCode := 0;
Socket.Close;
end;

эту ошибку моно как нить остановить!?


 
Копосов Н.В.   (2003-11-03 15:48) [18]

ты гений у меня всё решилось


 
Digitman   (2003-11-03 15:51) [19]

не выдумывай

этот код

procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket2.ClientType := ctBlocking;
ClientSocket2.Address:="127.0.0.1";
ClientSocket2.port:=5555;
try
ClientSocket2.open;
except
form1.Caption:="no";
end;
end;

не может не обрабатывать исключения, возникающие при Open (т.е. именно ошибки коннекта).
и никаких OnError не нужно.


 
Копосов Н.В.   (2003-11-03 17:19) [20]

бр-р-р-р не понял, поясни
>>не может не обрабатывать исключения, возникающие при Open (т.е. >>именно ошибки коннекта).
>>и никаких OnError не нужно.

Это меня смутило, с верхним кодом всё пахало.


 
Копосов Н.В.   (2003-11-03 17:23) [21]

может так:
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket2.ClientType := ctBlocking;
ClientSocket2.Address:="127.0.0.1";
ClientSocket2.port:=5555;
try
ClientSocket2.open;
except
form1.Caption:="ошибка соединения";
ClientSocket2.Close;
end;
end;


 
Digitman   (2003-11-03 17:26) [22]


> может так:


работает ? значит - так


 
Копосов Н.В.   (2003-11-03 17:32) [23]

да ты руль, билися мы с тобой весь день, но чего хотели добились :-)


 
Digitman   (2003-11-03 17:54) [24]

).. а завтра ты спросишь, почему, мол, "прога виснет", пока коннект идет))))))))))


 
Копосов Н.В.   (2003-11-08 13:21) [25]

>>).. а завтра ты спросишь, почему, мол, "прога виснет", пока >>коннект идет))))))))))

Что надо в отдельный поток загонять


 
Digitman   (2003-11-08 13:35) [26]


> Копосов Н.В.


совершенно необязательно


 
Копосов Н.В.   (2003-11-08 14:00) [27]

Дело в том что я с такой проблемой не столкнулся, но так на будущее...интересовался



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

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

Наверх




Память: 0.5 MB
Время: 0.012 c
6-25473
BlackSun
2003-11-07 05:55
2004.01.09
Работа с сокетами и вылет проги


1-25400
Rte
2003-12-25 17:54
2004.01.09
Как обьявить структуру как в C?


1-25429
EugenCFG
2003-12-23 22:32
2004.01.09
Здраствуйте ещё раз... ! На тему SetCapture... И определения


14-25520
SiJack
2003-12-17 16:15
2004.01.09
Какой струйный принтер посоветуете ?


6-25497
sipliy
2003-11-10 11:32
2004.01.09
Бьются файлы при закачке их на ftp сервер.





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