Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получить порядковый номер отключившегося клиента 
:(
    Опции темы
manz9
Дата 9.12.2010, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 9.12.2010

Репутация: нет
Всего: нет



Использую компоненты TServerSocket, ClientSocket. Как получить порядковый номер отключившегося клиента по событию ServerSocket1ClientDisconnect? Спасибо. 
PM MAIL   Вверх
kami
Дата 9.12.2010, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 6
Всего: 72



Не нужно делать этого. Чересчур много проблем потом вылезет.
Ориентируйтесь по параметру Socket в этом событии (да и во всех остальных).

И напоследок (с которого и нужно было начинать): что Вы планировали сделать с этим индексом?

Это сообщение отредактировал(а) kami - 9.12.2010, 18:43
PM MAIL WWW   Вверх
casinosoftguru
Дата 9.12.2010, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 22.12.2008

Репутация: нет
Всего: нет



в гугле по запросу ServerSocket1ClientDisconnect очень много полезного найти можно..
непонятно что имеется в виду под "порядковый номер" клиента ?
IP и хостнейм можно так узнать

Код

Socket.RemoteHost
Socket.RemoteAddress


при подключении по ним можно выдать номер клиенту а потом его и вычислить..
PM MAIL   Вверх
manz9
Дата 9.12.2010, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 9.12.2010

Репутация: нет
Всего: нет



Цитата

Ориентируйтесь по параметру Socket в этом событии (да и во всех остальных).

Точно, спасибо.
Цитата

Socket.RemoteHost
Socket.RemoteAddress

Про это я знал, но мне нужно было другое. 
Цитата

что Вы планировали сделать с этим индексом?

Есть массив клиентов (назовём его a). При подключении клиента находился такой элемент массива a, параметр Active которого равен false, ну и устанавливался потом в true. Так вот при отключении клиента нужно было к массиву обращаться, чтобы Active отк. клиента присвоить false. 
a[Socket.SocketHandle].Active := false;
Сейчас вот так прописано в ServerSocket1ClientDisconnect. Пока не тестировал, но думаю, что это правильно.

Это сообщение отредактировал(а) manz9 - 9.12.2010, 20:23
PM MAIL   Вверх
kami
Дата 9.12.2010, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 6
Всего: 72



Цитата(manz9 @  9.12.2010,  20:21 Найти цитируемый пост)
a[Socket.SocketHandle].Active := false;

SocketHandle действительно уникальный идентификатор соединения. Вот только если клиент подключится/отключится/подключится вновь, то SocketHandle будет разным, так же как и комбинация Address|Port. Кроме того, SocketHandle может принимать достаточно большое количество значений (u_int = integer), и какое значение система присвоит новому соединению - этого никто не угадает. Что будет, если у первого соединения SocketHandle будет равен, к примеру 488, а второго - 476 (значения из только что сделанной тестовой программы)?
А зачем этот массив нужен?

Добавлено через 7 минут и 1 секунду
Цитата(manz9 @  9.12.2010,  20:21 Найти цитируемый пост)
При подключении клиента находился такой элемент массива a, параметр Active которого равен false, ну и устанавливался потом в true.

В дополнение - что мешает занести индекс элемента массива, которому только что присвоили Active:=True в поле Socket.Data?

Пояснение:

Код

procedure ...ServerSocketOnClientConnect(Sender:TObject; Socket:TCustomWinSocket);
...
  a[i].Active:=True;
  Socket.Data:=pointer(i);
...

procedure ...ServerSocketOnClientDisconnect(...)
...
  a[integer(Socket.Data)].Active:=False;
...

PM MAIL WWW   Вверх
manz9
Дата 10.12.2010, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 9.12.2010

Репутация: нет
Всего: нет



Цитата

SocketHandle действительно уникальный идентификатор соединения. Вот только если клиент подключится/отключится/подключится вновь, то SocketHandle будет разным, так же как и комбинация Address|Port. Кроме того, SocketHandle может принимать достаточно большое количество значений (u_int = integer), и какое значение система присвоит новому соединению - этого никто не угадает. Что будет, если у первого соединения SocketHandle будет равен, к примеру 488, а второго - 476 (значения из только что сделанной тестовой программы)?

Об этом не знал. Спасибо за прояснение.
Цитата

В дополнение - что мешает занести индекс элемента массива, которому только что присвоили Active:=True в поле Socket.Data?

Мешало незнание.
Спасибо за помощь =).
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0451 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.