编辑:为了更清楚,我基本上需要区分在服务器远程对象注册表中存储的对象中进行远程方法调用的不同客户端。我怎么能这样做?
以下是这种情况:
我目前正在使用Java rmi创建客户端/服务器命令行界面应用程序,以在客户端和服务器之间交换数据(存储在Strings中)。
我遇到了问题,但我必须允许客户端使用user / pass发送身份验证命令。此身份验证命令(例如:> user myUserName myPassword)必须通过相同的远程调用方法发送,该方法用于发送服务器必须应答的所有其他命令。
我的问题:严格来说,客户端必须只发送命令并显示从服务器收到的命令的文本结果。作为一个简单的客户端,它没有状态。
由于某些方法要求客户端登录或者在客户端登录时具有不同的服务器端实现,我需要跟踪服务器上登录的客户端状态(不是问题,我计划在用户数据库中为每个用户保留一个时间戳并使用超时),并且还必须区分不同的客户端。
现在,我想我对远程对象的工作方式有了一个很好的了解,并且我已经能够在服务器端注册远程对象并使用客户端从它访问远程方法。
所以,我需要做更多,我不仅要让客户端能够访问远程方法,我还需要远程方法(以及运行它们的服务器)来知道哪个网络客户端正在调用此方法(不通过客户端用户名/传递为远程方法中的参数)。
我认为rmiclientsocketfactory和rmiserversocketfactory必须定制用于执行此操作,但我不知道如何继续。
谢谢大家的时间。
答案 0 :(得分:1)
对象未存储在注册表中。存根存储在注册表中。远程对象位于服务器主机中。
请参阅java.rmi.server.RemoteServer.getClientHost()
。
套接字工厂与它没有任何关系。