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-12-21 13:44:00) [1]

>И еще одна закономерность выявилась. Ошибка срабатывает если шланг выдернул у себя, а если на том конце его дергаешь ничего не срабатывает.

Компы, я так понимаю, через хаб/свич соединены, что ж удивляться, что ничего не срабатывает? Соединение с хабом то физически есть, а то, что удалёенное оборвано, хаб никому не сообщит.


Сергей М.   (2006-12-21 12:45:00) [2]


> Anatoly Podgoretsky ©   (21.12.06 12:31) [44]


Угу.

Как в том анекдоте:

Мойша: - Я только что умер, срочно передайте Рабиновичу, что десятку, которую он занял у меня вчера и обещал отдать завтра, я ему таки прощаю


Anatoly Podgoretsky   (2006-12-21 12:31:00) [3]

> Сергей М.  (21.12.2006 8:19:43)  [43]

Он наверно расчитывает, что отсоединеный сервер/клиент смогут передать событие отсоединения по несуществующему в данный момент каналу связи.


Сергей М.   (2006-12-21 08:19:00) [4]


> hustler   (21.12.06 00:08) [42]


> если у серва выдернуть шланг, то у клинта должно произойти
> событие OnDisconnect


Нет, не должно.


> ошибки 10061 и 10053 возбуждаются при соединении, а не передаче
> данных


10061 - при соединении, 10053 - при приеме/передаче


hustler   (2006-12-21 00:08:00) [5]

Дык вроде если у серва выдернуть шланг, то у клинта должно произойти событие OnDisconnect, а не OnError? а ошибки 10061 и 10053 возбуждаются при соединении, а не передаче данных?
З.Ы. Я сам недавно начал работать с сетью, так что это тока мое предположение)


Eraser   (2006-10-27 02:08:00) [6]

> [39] Denizzz   (26.10.06 14:17)

это потому что, при выдергивании шланга у себя - система об этом сразу же узнает и уведомляет стек TCP/IP.


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


> Ошибка срабатывает если шланг выдернул у себя, а если на
> том конце его дергаешь ничего не срабатывает


Советую внимательно изучить TCP-циклограмму.
см., например, http://book.itep.ru, раздел "Протокол ТСР"


Denizzz   (2006-10-26 14:17:00) [8]


> Значит ты его (отказа в том или ином виде) попросту не дождался.

См. (37) - за минуту это условие выполняется 12 раз!
И еще одна закономерность выявилась. Ошибка срабатывает если шланг выдернул у себя, а если на том конце его дергаешь ничего не срабатывает.


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


> не срабатывает даже после минуты ожидания


Значит ты его (отказа в том или ином виде) попросту не дождался.


Denizzz   (2006-10-26 14:09:00) [10]

после слова "конце" - запятая


Denizzz   (2006-10-26 14:08:00) [11]

В общем если убиваю процесс на том конце срабатывает чекпойнт на OnError, если выдергиваю шланг - не срабатывает даже после минуты ожидания хотя событие:
procedure TForm1.TimerTestTimer(Sender: TObject);
begin
 ClientSocket1.Socket.SendText('.');
end;

выполняется каждые пять секунд


Сергей М.   (2006-10-26 12:08:00) [12]


> Falcao   (26.10.06 12:05) [34]


Ну так на то и таймер у автора)


Falcao   (2006-10-26 12:05:00) [13]

На счет компонентов не утверждаю, ибо не работал с емя.
На счет гонцов - я так понял, что человек хочет "поймать" момент выхода из сети. В случае отправки (постоянной) пакетов, ака отправка файлов, естественно, что ни каких гонцов посылать не надо.


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


> Falcao   (26.10.06 11:36) [32]



> Может прсто это компоненты такие?


Нормальные компоненты.


> что мешает устроить пынг?


Это еще зачем ?)

Я, к примеру, послал кому-то телеграмму с уведомлением о доставке, она движется к адресату с определенной "скоростью". Если адресат на момент доставки отсутствует, почтовая служба обязана меня об этом известить. Так вот ты сейчас предлагаешь мне все то время, пока телеграмма находится в пути, непрерывно посылать к адресату гонцов с целью выяснить, не умер ли он там, пока к нему идет моя телеграмма)


Falcao   (2006-10-26 11:36:00) [15]

Мдааа =)))) Невероятное что-то. Может прсто это компоненты такие?
АПИ еще не подводил, Denizz попробуй вот так:
//подключи winsock
WSADATA wsaData;
 SOCKET sock = 0;
 struct sockaddr_in sad;

if ( WSAStartup(MAKEWORD(1,1), &wsaData))
   ShowMessage("ошибка подгрузки WinSock");

 sad.sin_family = AF_INET;
 sad.sin_port = htons(5550);

 sad.sin_addr.s_addr = inet_addr("10.0.0.2");//или любой dest-IP, для теста, что в сети
 memset(&(sad.sin_zero), '\0', 8);

 sock = socket(AF_INET , SOCK_STREAM, 0);
 if (!sock)
     ShowMessage("Ошибка создания сокета");
 int sa;
 sa = sizeof(struct sockaddr);
 if (connect( sock,
              (struct sockaddr *)&sad,
              sizeof(struct sockaddr))==-1)
       ShowMessage("Нет контакта.");
    else
       ShowMessage("Есть контакт!");
 closesocket(sock);

А что мешает устроить пынг? Можно гейтвей(или кой-нить сервер в ЛС) для верности пинговать.


Сергей М.   (2006-10-26 09:12:00) [16]


> Denizz   (25.10.06 19:20) [29]


> Охота, чтоб программа была на все готова


Благое желание, прекрасно его понимаю.

Но и ты пойми, что "выдергивание шланга" у партнера в момент исполнения метода приема/передачи обязанопривести либо к немедленному возбуждению исключения либо к возникновению не позднее чем через некоторое время после успешного завершения исполнения метода (оно небольшое, определяется некоторыми системными параметрами) события OnError c соотв.кодом ошибки. И если ни то ни другое у тебя не произошло, то это означает, что со "шлангом" все в порядке.


Anatoly Podgoretsky   (2006-10-25 19:24:00) [17]

Да какой же это ОК


Denizz   (2006-10-25 19:20:00) [18]

Да ну вас!
причем прогу пишу  не для себя, друг попросил. Все в ней ОК, но только этот косяк и мешает (можно назавть это краш-тестом). реально такой ситуации не было. Шланги никто не выдергивает.
Охота, чтоб программа была на все готова.


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


> Орион ©   (25.10.06 15:07) [27]
> а зачем


> пихать .. потом .. выдергивать


Как это "зачем" ?!

Приятно) .. же) ... "туда-сюда-обратно"))


Орион   (2006-10-25 15:07:00) [20]

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


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

Наверх

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