【问题标题】:Java rmi, differentiating between multiple clientJava rmi,区分多个客户端
【发布时间】:2011-11-25 12:10:14
【问题描述】:

编辑:为了更清楚,我基本上需要区分在服务器远程对象注册表中存储的对象中执行远程方法调用的不同客户端。我怎么能这样做?

情况是这样的:

我目前正在创建一个客户端/服务器命令行界面应用程序,使用 Java rmi 在客户端和服务器之间交换数据(存储在字符串中)。

我遇到了问题,而我必须允许客户端使用用户/密码发送身份验证命令。此身份验证命令(例如:>user myUserName myPassword)必须通过用于发送服务器必须回答的所有其他命令的相同远程调用方法发送。

我的问题:严格来说,客户端必须只发送他的命令并显示从服务器接收到的命令的文本结果。作为一个简单的客户端,它没有状态。

由于某些方法需要客户端登录或客户端是否登录时具有不同的服务器端实现,因此我需要在服务器上跟踪客户端登录状态(不是问题,我计划简单地在用户数据库中为每个用户保留一个时间戳并使用超时)并且还必须区分不同的客户端。

现在,我想我对远程对象的工作原理有了一个很好的了解,并且我已经能够在服务器端注册一个远程对象并使用客户端从它访问一个远程方法。

所以,我需要做更多的事情,我不仅要让客户端能够访问远程方法,我还需要远程方法(以及运行它们的服务器)知道哪个网络客户端正在调用这个方法(不通过客户端用户名/作为远程方法中的参数传递)。

我认为必须自定义使用 rmiclientsocketfactory 和 rmiserversocketfactory 来执行此操作,但我不知道如何进行。

感谢大家的宝贵时间。

【问题讨论】:

    标签: java client-server rmi command-line-interface


    【解决方案1】:

    对象不存储在注册表中。存根存储在注册表中。远程对象在服务器主机中。

    java.rmi.server.RemoteServer.getClientHost()

    套接字工厂与它无关。

    【讨论】:

    • 谢谢 EJP,RemoteServer 的 getClientHost() 方法看起来和我需要的完全一样,我知道不同客户端的线程是由 java RMI 本身完成的,但不知何故我没有找到任何与该特定相关的东西在做研究的同时,我可以向你保证,我环顾四周。我会努力解决这个问题,谢谢你的帮助。
    • @tehjord 好吧,它完全不在最明显的地方;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    相关资源
    最近更新 更多