Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Идентификация пользователя по сокетам, сокет + апплет 
:(
    Опции темы
JoGi
  Дата 25.2.2006, 03:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день,

Я тут с такой проблемкой столкнулся... На стороне клиента имеется апплет, который коннектится к серверу. На сервере такой код:

Код

clientSocket = serverSocket.accept();
clients.add(clientSocket);


То есть, имеется вектор активных клиентов. Допустим, адрес к серверу www.server.ru/enter.php. Тут клиент вводит логин, пароль и потом апплет конектится к серверу. Некоторые из проблем:
* если подключившийся клиент нажмет ctrl+n, откроется копия окна. Выполнив на сервере код " for all clients send 'hello world' ", сообщение поступает в новое окно, причем в 2 эгземплярах. Сообщения сервер принимает из обоих окон.
* или в етом-же окне браузера клиент впишет www.server.ru/enter.php и законектится заного, то сервер шлет сообщения и на новое имя и на старое(видно в дэбагере), которое уже по идее закрыто.

В обоих случаях, проверяется подключен ли клиент - если при посылке сообщение возвращается false, то сокет клиента удаляется из clients. Но как показывает практика, почемуто возвращается true. Еслиже закрыть окно браузера и залогинится через новое окно, то при попытке послать данные в закрытое окно возвращается ошибка - как и должно быть. Почемуже пока окно браузера не закрыто, хоть в него и www.google.ru пиши, сервер всеравно шлет ему сообщения без ошибок. Получается он связывается с браузером а не с аплетом smile Глупость какаято...

ВОПРОС: Можно-ли както сравнить сокеты? Хотелосьбы получить чтото такое

Код

boolean duplicate = false;

clientSocket = serverSocket.accept();

for(int i=0; i<clients.size() - 1; i++)
   if(clientSocket == clients.get(i))
      duplicate = true;

if(!duplicate)
   clients.add(clientSocket);


Или может быть есть какойто другой способ решить эту проблему?

За ранее спасибо.

Это сообщение отредактировал(а) JoGi - 25.2.2006, 03:06
PM MAIL   Вверх
COVD
Дата 25.2.2006, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

Почемуже пока окно браузера не закрыто, хоть в него и www.google.ru пиши, сервер всеравно шлет ему сообщения без ошибок. Получается он связывается с браузером а не с аплетом  Глупость какаято...


Если апплет стартовал, то он продолжает работать, даже если вы в браузер загрузили другую страницу (www.google.ru )
Если из апплета открывается новый фрейм, то окно браузера можно даже закрыть. Апплет будет работать.

Соединение с апплетом должно быть уникальным. Можно идентифицировать по логину, если они уникальные в системе. Тогда при открытии сокета апплет должен передать логин пользователя и если сервер обнаружит, что сокет для этого логина уже открыт, то отказать в соединении. Для этого надо уже открытые соединения хранить в hashtable с логином в качестве ключа. Однако если пользователь неудачно закроется и сервер это не обнаружит, то второй раз пользователь не сможет зайти в систему.

Это сообщение отредактировал(а) COVD - 25.2.2006, 19:00
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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