Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TServerSocket [D6, Win2k]


jumper ©   (2002-07-24 09:02:00) 

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


Polevi   (2002-10-02 09:35:00) [1]

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

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


VID   (2002-10-01 20:29:00) [2]

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

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

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


Polevi   (2002-10-01 18:17:00) [3]

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


VID   (2002-10-01 17:43:00) [4]

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

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

вроде так...


Ghost.   (2002-10-01 15:39:00) [5]


> Cheboor

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


megatrend   (2002-10-01 11:08:00) [6]

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


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

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


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

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

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


Наверх

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