Главная страница
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
14-93192
Lony
2002-11-09 12:51
2002.11.28
Выделение текста


1-93138
cosinus
2002-11-18 10:58
2002.11.28
Создание алгоритма димминга


1-92968
Mad_Ghost
2002-11-18 14:03
2002.11.28
Socket - как отослать сообщение одному юзверю?


3-92892
oss
2002-11-11 11:05
2002.11.28
Добавление записи в FireBird


14-93216
Neox
2002-11-07 16:01
2002.11.28
PopUp (Hint)