2013-04-09 2 views
2

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

У меня проблема, потому что когда я запускаю двух клиентов, они получили ответ от одного объекта на сервере из класса OneTimePad.

Таким образом, клиент A возвращает ключ, зарезервированный для клиента b, из-за конкретного алгоритма эта ситуация не может произойти.

Сервер посылает клиентам только переменную E и N (как в RSA), поэтому я не могу сериализовать объект OneTimePad и отправлять его по сети (потому что в нем будут все ключи).

Как я могу сделать для каждого клиента один объект класса OneTimePad?

ответ

3

Я назвал этот образец удаленного сеанса в своей книге 2001 года. Удаленный объект в реестре является своего рода сервером входа, экспортирующим только метод login(). Метод login(), в случае успеха, возвращает новый удаленный объект для каждого вызова, который в основном является объектом удаленного сеанса для каждого клиента. Этот объект сеанса может экспортировать метод logout(), который сам неэкспонирует, и он также может реализовать Unreferenced,, так что метод unreferenced() также не может сам себя реализовать (или вы можете полагаться на DGC, который имеет одно и то же: в любом случае: используя Unreferenced, вы можете зарегистрировать его). Этот объект удаленного сеанса экспортирует все удаленные методы, к которым должен иметь доступ доступ к зарегистрированному клиенту, и поскольку он является клиентом, он может содержать состояние клиента, следовательно, это сеанс.

public interface RemoteLogin extends Remote 
{ 
    RemoteSession login() throws RemoteException; 
} 

public interface RemoteSession extends Remote 
{ 
    void logout() throws RemoteException; 
    void myMethod(...) throws RemoteException; // whatever you need 
} 

public class RemoteLoginImpl extends UnicastRemoteObject implements RemoteLogin 
{ 
    // ... 
    public RemoteSession login() 
    { 
    // ... 
    return new RemoteSessionImpl(); // whatever arguments you need 
    } 
} 

public class RemoteSessionImpl extends UnicastRemoteObject implements RemoteSession, Unreferenced 
{ 
    // ... 
} 
+0

Звуковой комплекс. Где я могу найти вашу книгу? Благодарю. –

+0

Это не сложно, это просто второй удаленный объект. Книга Pitt & McNiff, * java.rmi: Руководство по удаленным вызовам метода, * Addison Wesley 2001, но Google для «Удаленного сеанса» должен найти что-то полезное. – EJP

+0

Из любопытства у меня возникали проблемы в моем последнем проекте, чтобы повторно подключить клиента, когда этот изменил IP-адрес (при использовании Wi-Fi вместо кабеля при выходе на встречу). В этом случае я не смог снова подключиться. Это просто или мне нужно открыть поток? –

Смежные вопросы