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