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

Вниз

TServerSocket   Найти похожие ветки 

 
jumper   (2002-07-24 09:02) [0]

добрый всем день. Возник вопрос следующего плана У меня есть
клиент и сервер. Когда отваливается клиент неправильным образом
(электричество вырубили, тачка сдохла, кабель выдернули etc)
то возникает событие onClientError с событием ErrorEvent =
eeDisconnect.
Вопрос, как цивилизованно закрыть отвалившийся сокет
есть процедура socket.disconnect(socket:integer), но насколько
я понял надо знать номер этого отвалившегося сокета (чего я не
знаю)


 
beglec   (2002-07-31 12:21) [1]

Вообщем это не как не отследить.
В Windows 9x - это вообще проблема глобального масштаба.
В Windows NT и ему подобных реализовано просче.
Возникает ошибка 10061 через 2 минуты.
а еще чсерез 5 минут возникает ошибка 10053 (по моему)
а еще через 30 секунд происходит нормальный DISCONNECT

Я делаю просче. В событии onError делаею ErrorCode:=0;
а через некоторое время само все отрубается


 
Cheboor   (2002-08-09 19:16) [2]

у каждого из socket.connections есть поле data типа поинтер, ну вот туда и следует записать какую-нить инфу о клиенте, а когда он отсохнет - тебе дадут эту data и ты сможешь сделать все что хочешь (ну например удалить из списков)


 
megatrend ©   (2002-10-01 11:08) [3]

Интересная тема, меня она тоже интересует


 
Ghost. ©   (2002-10-01 15:39) [4]


> Cheboor

как раз если шнур выдернут..то хрен там чего дадут..тут подругому надо..


 
VID ©   (2002-10-01 17:43) [5]

Чего-то я не пойму...
Клиент подключён к серверу.
В какой то момент клиент отключается от сервера (например, неожиданно вырубили комп, где была запущена прога-клиент)
На сервере возникает событие:
onClientError () в котором одним из параметров будет Socket:TCustomWinSocket

ну и по идее в этом событии надо написать:
CloseHandle(Socket.Handle) либо попробовать FreeAndNil(Socket)

вроде так...


 
Polevi ©   (2002-10-01 18:17) [6]

2VID © (01.10.02 17:43)
ничего у тебя не возникнет - сам попробуй шнурок выдернуть и убедись
keep-alive механизм надо реализовывать, опрашивать клиентов периодически - кто не ответил тот труп


 
VID ©   (2002-10-01 20:29) [7]

TO Polevi: ну мне не очень повезло со шнурками :) я свои сетевые проги на одном компе разрабатываю, потому как второго нету, я вообще дома программирую, не работаю :)
Так что Я НЕ ЗНАЛ...

Теперь насчёт Keep-Alive. Я Видел в опциях аськи такую галочку. Какой принцип работы ? Насколько я понимаю, сервер посылает например через каждые 5 минут пакет клиенту, на который он должен откликнуться. Если клиент будет молчать в течении минуты после этого пакета и так и не откликнеться, значит он сдох, и сервер с ним официально распрощается.

Т.е. всё делает сервер. А НАФИГА ГАЛОЧКА KEEP CONNECTION ALIVE СТОИТ В ОПЦИЯХ ICQ ? Неужели для того, что бы пользователь мог разрешить/запретить аське посылать ответный пакет серверу ?


 
Polevi ©   (2002-10-02 09:35) [8]

ну почему обязательно сервер
допустим у тебя на сервере есть список клиентов, у каждого св-во LastActivity:TDateTime
при каждом полученном пакете от этого клиента ты делаешь LastActivity:=now
и раз в минуту, к примеру, запускаешь ф-ию которая просто делает
if Now-LastActivity>TimeOut then KillClient
а keep-alive пакеты может и клиент посылать - просто команда, на которую сервер ничего делать не должен кроме как LastActivity:=now

насчет Icq не знаю



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

Текущий архив: 2002.11.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
3-92889
Ильдар
2002-11-09 17:15
2002.11.28
Как восстановить диапазон таблицы Paradox?


14-93186
herosofnn
2002-11-09 11:53
2002.11.28
Народ помогите


8-93155
Natalia
2002-08-09 07:16
2002.11.28
просмотр Gif


6-93161
начинающий програмер
2002-09-24 17:53
2002.11.28
FileMon и RegMon


7-93264
brestmarket
2002-09-26 15:14
2002.11.28
Как определить, что запуск приложения произвели с CD-ROM?