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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Идентификация клиентов 
:(
    Опции темы
SanLLIer
  Дата 8.2.2010, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Проблема с идентификацией клиентов. Использую socket.handle, но когда клиент подключается к серверу у его "хэндл" = 640 (допустим), а через несколько секунд, когда от того же клиента приходит сообщение, его "хэндл" = уже 154156. 
Как бороться? Или может подскажете другой способ идентификации клиентов?
PM MAIL   Вверх
kami
Дата 8.2.2010, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Socket.SocketHandle.
И зачем что-то из идентификаторов соединения постоянно принимать от противоположной стороны?
Чем не устраивает то же самое, но у сервера?
Тот же ServerSocket1.Socket.Connections[i].SocketHandle ?

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


Шустрый
*


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

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



Про сервер и говорю.
На стороне сервера я определяю хэндл клиента при подключении последнего к серверу, но когда спустя пару секунд клиент обращается к серверу снова, то у него уже другой хэендл(!). Как такое может быть? Или я что-то "недогоняю"?

Это сообщение отредактировал(а) SanLLIer - 8.2.2010, 21:15
PM MAIL   Вверх
kami
Дата 8.2.2010, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(SanLLIer @  8.2.2010,  20:48 Найти цитируемый пост)
когда спустя пару секунд клиент обращается к серверу снова, то у него уже другой хэендл(!). Как такое может быть?

Если клиент отключился и потом подключился опять, то хендл однозначно будет другой. Если соединение осталось то же, то хендлы не меняются.
В первом случае для локалки могу предложить использовать Socket.RemoteAddress (вообще, соединение идентифицируется парой адрес:порт, но при втором подключении адрес будет тот же, а вот удаленный порт поменяется). Если предполагается работа через интернет, то в общем случае - только отправка серверу какой-либо информации о клиенте (что-то типа уникального номера, хеша логина/пароля и т.п.), позволяющая идентифицировать клиента.
Во втором случае (соединение не прерывалось) - такого быть не может, хендл присваивается сокету 1 раз и не меняется за время, пока подключение не будет разорвано smile
PM MAIL WWW   Вверх
SanLLIer
Дата 8.2.2010, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Допустим. А как сделать чтобы коннект не рвался?
PM MAIL   Вверх
kami
Дата 8.2.2010, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(SanLLIer @  8.2.2010,  22:52 Найти цитируемый пост)
 А как сделать чтобы коннект не рвался?

Хороший вопрос, но не по адресу.
Есть причины, не зависящие от программы - начиная от глюков провайдера заканчивая банальным выдиранием кабеля. Если не брать их в расчет, то решение может быть только одно - исключить (в разумных пределах, конечно) Socket.Close и т.п. Как это сделать - Вам лучше знать, код Ваш, а не мой.

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


Шустрый
*


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

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



Что странно закрываю канал я только в конце программы (при закрытии формы т.е. smile )
Ну да ладно. Пойду по другому пути... Спс
PM MAIL   Вверх
Mikel
Дата 9.2.2010, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 882
Регистрация: 30.3.2002
Где: Саратов

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



Может в Вашей реализации будет проще работать с указателями на сокеты?


--------------------
...so remember, it's better to burn out than to fade away
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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