Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.02.03;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.045 c
15-1198487954
Kolan
2007-12-24 12:19
2008.02.03
А DBX есть в BDS 2006?


2-1200053064
Farel
2008-01-11 15:04
2008.02.03
Подсети


2-1199770321
XerSon
2008-01-08 08:32
2008.02.03
Как в реестр записать и считать двоичные данные, к примеру (50)


2-1200134350
AntonUSAnoV
2008-01-12 13:39
2008.02.03
как узнать существует ли файл?


15-1198883081
No_Dead
2007-12-29 02:04
2008.02.03
НГ на носу&#133 А будете ли вы в нем что либо менять?





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