Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2011, 14:50   #1
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
Восклицание ServerSocket -> ClientDisconnect

Всем Привет!

Столкнулся с такой проблемой:
при подключении к серверу клиенты отсылают свой NICK(для чата) и сервер формирует список пользователей, когда клиент отключается нада обновить список клиентов и разослать клиентам новый, как это реализовать?

Отсюда два вопроса:
1. Правильно ли будет такая реализация:
a. Сохраняем список в сторону(копия)
b. Очищаем список
c. Сервер повторно рассылает запрос на NICK по всем активным соединениям
d. Ожидание от клиентов ответа
e. Формирования нового списка
f. Рассылка нового списка
Но тут встает проблема(если я правильно понимаю) как отловить что все активные соединения (клиенты) УЖЕ ОТОСЛАЛИ свои ответы на запрос сервера?
2. Если алгоритм неправильный подскажите реализацию

Помогите...
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!
spirit-ua вне форума Ответить с цитированием
Старый 21.01.2011, 15:20   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Цитата:
Сообщение от spirit-ua Посмотреть сообщение
когда клиент отключается нада обновить список клиентов и разослать клиентам новый
Может просто сказать, что клиент такой-то отключился? Если у вас в чате больше тысячи пользвователей, вы весь канал займете только рассылками списков )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 21.01.2011, 15:39   #3
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

> c. Сервер повторно рассылает запрос на NICK по всем активным соединениям

Нашиша ?)
Где это видано чтобы клиент мог менять ник без предварительного уведомления сервера об этом ?
mss вне форума Ответить с цитированием
Старый 21.01.2011, 15:46   #4
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
Может просто сказать, что клиент такой-то отключился? Если у вас в чате больше тысячи пользвователей, вы весь канал займете только рассылками списков )
1. Так с-но как определить что именно ЭТОТ клиент?
2. Рассылать все равно придется, не списки так команду - одно и тоже, только короче сообщение
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!

Последний раз редактировалось spirit-ua; 21.01.2011 в 15:57.
spirit-ua вне форума Ответить с цитированием
Старый 21.01.2011, 15:48   #5
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
По умолчанию

Цитата:
Сообщение от mss Посмотреть сообщение
> c. Нашиша ?)
Где это видано чтобы клиент мог менять ник без предварительного уведомления сервера об этом ?
а где смена ника, не понял?
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!
spirit-ua вне форума Ответить с цитированием
Старый 21.01.2011, 16:04   #6
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Цитата:
Сообщение от spirit-ua Посмотреть сообщение
1. Так с-но как определить что именно ЭТОТ клиент?
А у вас вобще клиенты как идентифицируются? Как минимум должен быть список из 3-х элементов:

ClientID [uin32] : ClinetName [ utf8 ] : CurrentAddress [ sockaddr_in ]

При отключении клиента в списке производится поиск его ID (по соответсвию адресу подключения) и этот ID рассылается остальным, с пометкой "удалить такой-то ID из своих локальных списков".

Цитата:
2. Рассылать все равно придется, не списки так команду - одно и тоже, только короче сообщение
Между отсылкой 4000 и 4000000 байт есть как бы небольшая разница.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 21.01.2011, 16:07   #7
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
Сообщение от spirit-ua Посмотреть сообщение
а где смена ника, не понял?
А зачем тогда серверу посылать "запрос на NICK" клиенту, если актуальный NICK клиента и так уже известен серверу с момента последней регистрации/перерегистрации этого клиента ?
mss вне форума Ответить с цитированием
Старый 21.01.2011, 16:15   #8
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
А у вас вобще клиенты как идентифицируются? Как минимум должен быть список из 3-х элементов:

ClientID [uin32] : ClinetName [ utf8 ] : CurrentAddress [ sockaddr_in ]

При отключении клиента в списке производится поиск его ID (по соответсвию адресу подключения) и этот ID рассылается остальным, с пометкой "удалить такой-то ID из своих локальных списков".

Между отсылкой 4000 и 4000000 байт есть как бы небольшая разница.
1. Идентификация производиться по логину и паролю, с какого адреса будет входить не имеет значения... отсюда получается что я могу идентифицировать клиента только по ник-нейм...
2. Что такое ID? это ID подключения сокета на сервере или ника?
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!

Последний раз редактировалось spirit-ua; 21.01.2011 в 16:18.
spirit-ua вне форума Ответить с цитированием
Старый 21.01.2011, 16:17   #9
spirit-ua
Форумчанин
 
Аватар для spirit-ua
 
Регистрация: 04.06.2009
Сообщений: 351
По умолчанию

Цитата:
Сообщение от mss Посмотреть сообщение
А зачем тогда серверу посылать "запрос на NICK" клиенту, если актуальный NICK клиента и так уже известен серверу с момента последней регистрации/перерегистрации этого клиента ?
А как определить кто отвалился? Адрес не канает - см. пост #8
Мне разрешено открывать только одну страницу - about :blank. Сперва было скучно, но потом я втянулся. Теперь у меня там живет 2 виртуальных друга, и я слышу голоса из розетки!
spirit-ua вне форума Ответить с цитированием
Старый 21.01.2011, 16:19   #10
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

1. Это не идентификация, а авторизация.
Вот для того, чтобы юзеры могли заходить с любого адреса и желательно знать, какой адрес связан с каким клиентом на данный момент.
2. Это уникальный номер юзера в системе. Первичный ключ в терминах БД. Всегда легче работать с целыми числами, чем со строками.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ServerSocket MyIE Работа с сетью в Delphi 9 24.06.2010 00:11
Есть ли у IdTCPServer такое свойство как у ServerSocket: ServerSocket.Socket.ActiveConnectio ns? TwiX Работа с сетью в Delphi 3 07.03.2010 14:28
ServerSocket HTL Работа с сетью в Delphi 2 02.01.2010 22:40
ClientSocket и ServerSocket Blood o men Работа с сетью в Delphi 2 25.11.2009 11:36
Вопрос по ServerSocket. maks448 Работа с сетью в Delphi 3 29.04.2009 08:56