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

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

ServerSocket, ClientSocket и "выдергивание шланга из сетевухи" [D7, Win2k, WinXP]


Страницы:   1 2 3

Denizzz ©   (2006-10-25 12:51:00) 

Как отловить разрыв соединения при выдергивании шланга из сетевой платы (отказ свитча и т.п.)?
Проверял - событие OnClientError и OnError не происходит.


Сергей М.   (2006-10-25 15:00:00) [21]

Если так то шланг - на месте.
Либо ты врешь, утверждая  что условия в [24] истинны.


Denizzz   (2006-10-25 14:59:00) [22]

да, так и есть


Сергей М.   (2006-10-25 14:50:00) [23]

т.е. ты утверждаешь, что:

1) ты поймал упомянутый брейкпойнт.
2) пошел и выдернул "шланг" у парнера по соединению
3) нажал F9
4) не получил исключения на уже упомянутой выше строчке с брейкпойнтом
5) и не поймал брейкпойнт на строчке ErrorCode := 0; (см. обработчик OnError)

?


Denizzz   (2006-10-25 14:45:00) [24]

она выполняется


Denizzz   (2006-10-25 14:45:00) [25]

ловит


Сергей М.   (2006-10-25 14:43:00) [26]

Что занчит "ничего" ? Не ловишь ее или что ?


Denizzz   (2006-10-25 14:37:00) [27]

Да. Ничего


Сергей М.   (2006-10-25 14:23:00) [28]


> ClientSocket1.Socket.SendText('.'); //<- Сюда брейкпойнт ставил ?


Denizzz   (2006-10-25 14:22:00) [29]

procedure TForm1.ClientSocket1Error(Sender: TObject;
 Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
 var ErrorCode: Integer);
begin
if ErrorCode=10061 then
 Memo1.Lines.Add(DateTimeToStr(Now())+' - текст')
else if ErrorCode=10053 then begin
 Memo1.Lines.Add(DateTimeToStr(Now())+' - текст');
 Memo1.Lines.Add('- текст');
 end;
Memo1.Lines.Add(DateTimeToStr(Now())+' - Код ошибки '+IntToStr(ErrorCode));
ErrorCode := 0;
SpeedButton1.Enabled:=False;
ClientSocket1.Close;
Icona('error.ico',NIM_MODIFY);
TimerWait.Enabled:=True;


Denizzz   (2006-10-25 14:21:00) [30]

procedure TForm1.ClientSocket1Error(Sender: TObject;
 Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
 var ErrorCode: Integer);
begin
if ErrorCode=10061 then
 Memo1.Lines.Add(DateTimeToStr(Now())+' - Ñîåäèíåíèå ñ ñåðâåðîì îòñóòñòâóåò')
else if ErrorCode=10053 then begin
 Memo1.Lines.Add(DateTimeToStr(Now())+' - Ñîåäèíåíèå ñ ñåðâåðîì ïîòåðÿíî');
 Memo1.Lines.Add('- áóäåò âêëþ÷åí òàéìåð ïðîâåðêè ñîåäèíåíèÿ');
 end;
Memo1.Lines.Add(DateTimeToStr(Now())+' - êîä îøèáêè '+IntToStr(ErrorCode));
ErrorCode := 0;
SpeedButton1.Enabled:=False;
ClientSocket1.Close;
Icona('error.ico',NIM_MODIFY);
TimerWait.Enabled:=True;


Denizzz   (2006-10-25 14:20:00) [31]

при этом если проверять
if ClientSocket1.Socket.Connected=True then
Memo1.Lines.Add('s-s-s') else Memo1.Lines.Add('w-w-w');

возвращает 's-s-s'


Сергей М.   (2006-10-25 14:19:00) [32]

и еще обработчик OnError ..


Denizzz   (2006-10-25 14:18:00) [33]


procedure TForm1.TimerTestTimer(Sender: TObject);
begin
 ClientSocket1.Socket.SendText('.');
end;


Сергей М.   (2006-10-25 14:09:00) [34]

Показывай код..


Denizzz   (2006-10-25 14:03:00) [35]

но ведь я так и делаю по таймеру (8)!!


Сергей М.   (2006-10-25 14:01:00) [36]

Ну и что ?

Как только ты попытаешься что-нть почитать или пописАть для этого соединения, тут же получишь исключение - это и будет фактом "шланга".


Denizzz   (2006-10-25 13:48:00) [37]

вот-вот... а шланг выдернут :(


Сергей М.   (2006-10-25 13:43:00) [38]

Значит на момент исполнения этого "делаю" ситуации а-ля "шланговая" не возникает.


Denizzz   (2006-10-25 13:42:00) [39]

Делаю ClientSocket1.Socket.SendText('бла-бла'); - ошибки не возникает


Сергей М.   (2006-10-25 13:26:00) [40]

И чем в этом случае таймер не вариант ?


Страницы:   1 2 3

Наверх

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