2013-04-09 2 views
2

RMI를 사용하여 암호화 시스템의 프로토 타입을 작성 중입니다.RMI 다중 클라이언트 - 각각 하나의 서버 객체

2 개의 클라이언트를 시작하면 OneTimePad 클래스의 서버에있는 하나의 개체에서 응답을 받기 때문에 문제가 있습니다.

그래서 클라이언트 A는 특정 알고리즘으로 인해 클라이언트 b 용으로 예약 된 키를 수신합니다.이 상황은 발생할 수 없습니다.

서버는 RSA와 마찬가지로 클라이언트에게 E 및 N 변수 만 전송하므로 OneTimePad 개체를 직렬화하고 네트워크를 통해 보낼 수 없습니다 (모든 키가 포함되어 있기 때문에).

각 클라이언트마다 OneTimePad 클래스의 개체를 하나씩 만들 수 있습니까?

답변

3

저는 이것을 2001 년도 저서에서 원격 세션 패턴이라고했습니다. 레지스트리의 원격 객체는 login() 메소드 만 내보내는 일종의 로그인 서버입니다. login() 메서드는 성공하면 기본적으로 클라이언트 별 원격 세션 개체 인 호출마다 새 원격 개체를 반환합니다. 이 세션 객체는 자체적으로 unexport하는 logout() 메서드를 내보낼 수 있으며 메서드도 자체적으로 unexports가되도록 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 주소가 변경되었을 때 클라이언트를 다시 연결하는 데 문제가있었습니다 (회의를 나가기 위해 케이블 대신 wifi를 사용할 때). 이 경우 다시 연결할 수 없었습니다. 이 간단한 또는이 스레드를 열어야합니까? –