【问题标题】:How do I implement RMI using the computers connected in the same network?如何使用连接在同一网络中的计算机实现 RMI?
【发布时间】:2015-08-25 18:26:13
【问题描述】:

我尝试使用连接在我公司网络中的两台计算机来实施 RMI 概念。我使用我的 IP 地址和特定端口号绑定了远程对象。当我在本地机器上尝试时一切正常。

现在为了从另一台计算机访问它,我与另一台计算机和一个客户端代码共享了 Adder(扩展 Remote)接口 .class 文件。当我尝试访问它时,它抛出了 ClassNotFoundException: stub not found

所以我分享了运行命令>> rmic AddImpl 后生成的stub.class 文件。之后它在远程计算机上也可以正常工作。

现在我的问题是,RMI 是这样实现的吗?我们是否需要共享 Adder 接口和生成的存根类文件以便客户端访问我们的远程方法?

以下是我的类和接口:

interface Adder extends Remote
class AddImpl extends UnicastRemoteObject implements Adder
class Server
class Client

【问题讨论】:

    标签: java rmi rpc


    【解决方案1】:

    您需要共享 3 个文件 Adder.class、Adder.java、AdderRemote_Stub.class(不是java代码)

    假设你已经编译了

    1. 创建两个不同的目录

    2. 启动 3 命令提示符

    3. 为第一个目录(服务器)设置前 2 个命令提示符

      示例:c:\rmiserver

      把所有文件放在这里

    4. 为第二个目录(客户端)设置最后 1 个命令提示符

      示例:c:\rmiclient

      将客户端特定的文件、存根和远程文件放在这里

    5. (可选)设置 CLASSPATH=。在所有命令提示符中

      这将允许在 CLASSPATH 中识别当前目录文件

    6. 重要:在命令提示符下运行 rmiregistry 命令,其中服务器 .class 文件位于 CLASSPATH 中

      在前 2 个命令提示符中的任何一个中运行 rmiregistry 5000 命令

      继续运行

    7. 在前 2 的剩余命令提示符中运行您的服务器“java MyServer”

    8. 在最后一个命令提示符下运行您的客户端“java MyClient”,这是一个不同的目录

      如果这有效,那么您的网络逻辑将有效

    重复java.rmi.ServerException: RemoteException occurred in server thread (ClassNotFoundException)

    【讨论】:

    • 是的,我的逻辑也适用于网络。我在问“RMI 是如何实现的(通过共享加法器、存根文件)?”
    • 您不需要共享 Adder.java。两个文件。
    • 是的,我明白了。只是想确认它是如何完成的。谢谢你:)
    • 这就是RMI使用stub和skel的工作方式,机器A和B将有一个额外的文件分发用于通信和对象序列化是相互理解的
    • 是的,我明白了。谢谢你:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    相关资源
    最近更新 更多