![]() |
|
Модераторы: Snowy, Poseidon, MetalFan |
![]()
|
|
| SanLLIer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 9.7.2008 Репутация: нет Всего: нет |
Проблема с идентификацией клиентов. Использую socket.handle, но когда клиент подключается к серверу у его "хэндл" = 640 (допустим), а через несколько секунд, когда от того же клиента приходит сообщение, его "хэндл" = уже 154156.
Как бороться? Или может подскажете другой способ идентификации клиентов? |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 6 Всего: 72 |
Socket.SocketHandle.
И зачем что-то из идентификаторов соединения постоянно принимать от противоположной стороны? Чем не устраивает то же самое, но у сервера? Тот же ServerSocket1.Socket.Connections[i].SocketHandle ? Это сообщение отредактировал(а) kami - 8.2.2010, 20:06 |
|||
|
||||
| SanLLIer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 9.7.2008 Репутация: нет Всего: нет |
Про сервер и говорю.
На стороне сервера я определяю хэндл клиента при подключении последнего к серверу, но когда спустя пару секунд клиент обращается к серверу снова, то у него уже другой хэендл(!). Как такое может быть? Или я что-то "недогоняю"? Это сообщение отредактировал(а) SanLLIer - 8.2.2010, 21:15 |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 6 Всего: 72 |
Если клиент отключился и потом подключился опять, то хендл однозначно будет другой. Если соединение осталось то же, то хендлы не меняются. В первом случае для локалки могу предложить использовать Socket.RemoteAddress (вообще, соединение идентифицируется парой адрес:порт, но при втором подключении адрес будет тот же, а вот удаленный порт поменяется). Если предполагается работа через интернет, то в общем случае - только отправка серверу какой-либо информации о клиенте (что-то типа уникального номера, хеша логина/пароля и т.п.), позволяющая идентифицировать клиента. Во втором случае (соединение не прерывалось) - такого быть не может, хендл присваивается сокету 1 раз и не меняется за время, пока подключение не будет разорвано |
|||
|
||||
| SanLLIer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 9.7.2008 Репутация: нет Всего: нет |
Допустим. А как сделать чтобы коннект не рвался?
|
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 6 Всего: 72 |
Хороший вопрос, но не по адресу. Есть причины, не зависящие от программы - начиная от глюков провайдера заканчивая банальным выдиранием кабеля. Если не брать их в расчет, то решение может быть только одно - исключить (в разумных пределах, конечно) Socket.Close и т.п. Как это сделать - Вам лучше знать, код Ваш, а не мой. Это сообщение отредактировал(а) kami - 8.2.2010, 23:06 |
|||
|
||||
| SanLLIer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 9.7.2008 Репутация: нет Всего: нет |
Что странно закрываю канал я только в конце программы (при закрытии формы т.е.
Ну да ладно. Пойду по другому пути... Спс |
|||
|
||||
| Mikel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 882 Регистрация: 30.3.2002 Где: Саратов Репутация: нет Всего: 2 |
Может в Вашей реализации будет проще работать с указателями на сокеты?
-------------------- ...so remember, it's better to burn out than to fade away |
|||
|
||||
![]()
|
| Правила форума "Delphi: Сети" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |