Java RMI, различие между несколькими клиентами - PullRequest
0 голосов
/ 26 сентября 2011

Edit: чтобы быть более понятным, мне нужно различать разные клиенты, выполняющие удаленный вызов метода в объектах, хранящихся в реестре удаленных объектов сервера. Как я мог это сделать?

А вот и ситуация:

В настоящее время я нахожусь в процессе создания приложения интерфейса командной строки клиент / сервер, использующего Java rmi для обмена данными (хранящимися в строках) между клиентами и сервером.

У меня проблема, в то время как я должен разрешить клиенту отправить команду аутентификации с пользователем / pass. Эта команда аутентификации (например: user myUserName myPassword) должна быть отправлена ​​через тот же удаленно вызываемый метод, который используется для отправки всех других команд, за которые сервер должен ответить.

Моя проблема: клиент должен строго отправлять только свои команды и отображать текстовый результат своей команды, полученный с сервера. Как простой клиент, он не имеет состояния.

Поскольку некоторые методы требуют, чтобы клиент вошел в систему или имел другую реализацию на стороне сервера, если клиент вошел в систему или нет, мне нужно отслеживать состояние клиента, вошедшего в систему на сервере (не проблема, Я планирую просто сохранить отметку времени для каждого пользователя в базе данных пользователей и использовать тайм-аут), а также должен различать клиентов.

Теперь, я думаю, у меня есть хорошее представление о том, как работает удаленный объект, и я смог зарегистрировать удаленный объект на стороне сервера и получить доступ к удаленному методу из него с помощью клиента.

Итак, мне нужно сделать больше, мне нужно, чтобы клиент не только имел доступ к удаленному методу, мне также нужен удаленный метод (и сервер, на котором он запущен), чтобы знать, какой сетевой клиент вызывает этот метод (без передачи имя пользователя / пароль клиента в качестве параметров в удаленном методе).

Я думаю, что rmiclientsocketfactory и rmiserversocketfactory должны быть специально использованы для этого, но я не знаю, как поступить.

спасибо всем за потраченное время.

1 Ответ

1 голос
/ 27 сентября 2011

Объекты не хранятся в реестре. Заглушки хранятся в реестре. Удаленные объекты находятся на хосте сервера.

См. java.rmi.server.RemoteServer.getClientHost().

Фабрики сокетов не имеют к этому никакого отношения.

...