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

Вниз

Как определить, что соединение разорвано?   Найти похожие ветки 

 
Nucer   (2007-05-21 19:00) [0]

Использую TClientSocket. Если грубо говоря выдернуть кабель из сетевой карты, то событие OnDisconnect/OnError не произойдет, пока не будет принята попытка отправить какой-нибудь данные... и то в этом случае задержка между вызовом send и событием может составить около 10ти секунд.

Можно как-нибудь обойтись без отправки и ускорить процесс?


 
DVM ©   (2007-05-21 21:20) [1]


> Можно как-нибудь обойтись без отправки и ускорить процесс?

Вот объясните мне, зачем надо обязательно знать, что соединение потеряно, если все равно ничего не передается?


 
Nucer   (2007-05-21 21:27) [2]

Для того, чтобы восстановить соединение.
---
Клиент соединяется с сервером, редко шлет какую-либо информацию, в основном получает ее. Но, сервер может и не слать ничего на протяжении пят минут, а потом отправить один пакет. Так вот если соединение разорвано, то клиент быстро соединяется заново. Но проблема в том, что в определенных случаях событие Disconnect возникает с очень большой задержкой.


 
Сергей М. ©   (2007-05-22 08:14) [3]


> в определенных случаях событие Disconnect возникает с очень
> большой задержкой


Рассказывай подробно про эти "определенные случаи" ..


 
Nucer   (2007-05-22 09:08) [4]

>Рассказывай подробно про эти "определенные случаи"...
К примеру, если я перезагружу свой роутер... в таком случае программа вообще не определит, что соединение разорвано пока не будет принята попытка передать данные.


 
Сергей М. ©   (2007-05-22 09:16) [5]


> Nucer   (22.05.07 09:08) [4]


Т.е. ты утверждаешь, что в данной конкретной ситуации событие OnDisconnect возникнет намного позже успешного (??) вызова Send-метода, так ?

Не верю.


 
Nucer   (2007-05-22 09:29) [6]

Нет, в данной ситуации я имел ввиду, что без вызова send события OnDisconnect можно ждать очень долго. А что делать, если мне не надо ничего передавать, а только принимать?


 
Сергей М. ©   (2007-05-22 09:38) [7]


> что делать, если мне не надо ничего передавать, а только
> принимать?


Заведи таймер, в его обработчике делай тоже самое что и в обработчике OnRead. Успешный вызов read-метода означает, что соединение "живое", неуспешный - "мертвое".


 
SpellCaster   (2007-05-22 14:46) [8]

"Пингуй" сервак тестовыми пакетами каждые 5 сек, например


 
Nucer   (2007-05-22 15:08) [9]


> Заведи таймер, в его обработчике делай тоже самое что и
> в обработчике OnRead. Успешный вызов read-метода означает,
>  что соединение "живое", неуспешный - "мертвое".

Делал так:
recv(cs.Socket.SocketHandle,pbuf,1,MSG_PEEK);
И так:
cs.Socket.Read(cs.Socket.SocketHandle);
И вот так:
cs.Socket.SendText("");

Никакой реакции. Достаточно отправить хотя бы один байт - cs.Socket.SendText("X") - получаю OnDisconnect.


> "Пингуй" сервак тестовыми пакетами каждые 5 сек, например

Не хотелось бы слать мусор каждые 5 секунд... пусть и один байт... наверняка есть другой выход.


 
DVM ©   (2007-05-22 15:25) [10]


> Не хотелось бы слать мусор каждые 5 секунд... пусть и один
> байт... наверняка есть другой выход.

нету.


 
Nucer   (2007-05-22 15:29) [11]

А что-нибудь типа KeepAlive запроса =)


 
Сергей М. ©   (2007-05-22 15:33) [12]


> наверняка есть другой выход


Других выходов нет и не будет.


> Делал так:
> recv(

С какого перепугу ты взялся за WinsockAPI ?
И если взялся, то где анализ результата. возвращаемого этой функцией ?


> И так:
> cs.Socket.Read


> Никакой реакции


Какую реакцию ты ожидал ?
Ты справку к методу TCustomWinSocket.Read читал, прежде чем ожидать какую-то конкретную реакцию ?


 
SpellCaster   (2007-05-23 13:17) [13]

> [11] Nucer   (22.05.07 15:29)
Это то же самое, что в [8]


 
Сергей М. ©   (2007-05-23 13:44) [14]


> Nucer   (22.05.07 15:29) [11]
>
> А что-нибудь типа KeepAlive запроса =)


Сначала научи сервер понимать такие запросы, тогда его можно и задействовать.



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

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

Наверх





Память: 0.48 MB
Время: 0.094 c
15-1198495044
@!!ex
2007-12-24 14:17
2008.02.03
Проблема зрения..


15-1198581847
{RASkov}
2007-12-25 14:24
2008.02.03
Бесплатный сыр:)


5-1166082873
zorik
2006-12-14 10:54
2008.02.03
Разработка компонента "TDBCheckListBox"


2-1200160636
петрович07
2008-01-12 20:57
2008.02.03
imagelist


2-1199563649
Pavelq
2008-01-05 23:07
2008.02.03
TListBox, CNDrawItem





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