Java RMI多个客户端-每个客户端一个服务器对象

Java RMI多个客户端-每个客户端一个服务器对象,java,rmi,Java,Rmi,我正在使用RMI编写密码系统的原型 我有一个问题,因为当我启动两个客户机时,他们从OneTimePad类的服务器中的一个对象得到响应 所以客户端A接收到为客户端b保留的密钥,由于特定的算法,这种情况不会发生 服务器只向客户端发送E和N变量(如RSA中的变量),因此我无法序列化OneTimePad对象并通过网络发送它(因为它将包含所有密钥) 如何为每个客户端创建OneTimePad类的一个对象?我在2001年的书中称之为远程会话模式。注册表中的远程对象是一种仅导出login()方法的登录服务器。l

我正在使用RMI编写密码系统的原型

我有一个问题,因为当我启动两个客户机时,他们从OneTimePad类的服务器中的一个对象得到响应

所以客户端A接收到为客户端b保留的密钥,由于特定的算法,这种情况不会发生

服务器只向客户端发送E和N变量(如RSA中的变量),因此我无法序列化OneTimePad对象并通过网络发送它(因为它将包含所有密钥)


如何为每个客户端创建OneTimePad类的一个对象?

我在2001年的书中称之为远程会话模式。注册表中的远程对象是一种仅导出
login()
方法的登录服务器。
login()
方法如果成功,每次调用都会返回一个新的远程对象,基本上是每个客户端的远程会话对象。这个session对象可以导出一个
logout()
方法,该方法可以取消自身的报告,它还可以实现
Unreferenced,
,这样
Unreferenced()
方法也可以取消自身的报告(或者您可以依赖于DGC,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
{
  // ...
}

听起来很复杂。我在哪里能找到你的书?谢谢。这并不复杂,它只是第二个远程对象。这本书是Pitt&McNiff,java.rmi:The Guide to Remote Method Invocation,Addison Wesley 2001,但是google for“Remote Session pattern”应该也会发现一些有用的东西。出于好奇,我在最近的一个项目中遇到了问题,当这个项目更改了IP地址时,我重新连接了一个客户机(当我去开会时使用wifi而不是电缆时). 在这种情况下,我永远无法重新连接。这是简单的还是我应该打开一个线程?这是一个新问题,我不知道“这个”是什么意思。@EJB谢谢!它工作得完美无缺。我甚至不需要在代码中做很多更改。非常感谢,好心的先生。(;