Форум: "Сети";
Текущий архив: 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