第一步我们需要先启动RMI服务端,并注册服务。
    RMI服务端注册服务代码:

    1. package com.anbai.sec.rmi;
    2. import java.rmi.Naming;
    3. import java.rmi.registry.LocateRegistry;
    4. public class RMIServerTest {
    5. // RMI服务器IP地址
    6. public static final String RMI_HOST = "127.0.0.1";
    7. // RMI服务端口
    8. public static final int RMI_PORT = 9527;
    9. // RMI服务名称
    10. public static final String RMI_NAME = "rmi://" + RMI_HOST + ":" + RMI_PORT + "/test";
    11. public static void main(String[] args) {
    12. try {
    13. // 注册RMI端口
    14. LocateRegistry.createRegistry(RMI_PORT);
    15. // 绑定Remote对象
    16. Naming.bind(RMI_NAME, new RMITestImpl());
    17. System.out.println("RMI服务启动成功,服务地址:" + RMI_NAME);
    18. } catch (Exception e) {
    19. e.printStackTrace();
    20. }
    21. }
    22. }

    程序运行结果:

    1. RMI服务启动成功,服务地址:rmi://127.0.0.1:9527/test

    Naming.bind(RMI_NAME, new RMITestImpl())绑定的是服务端的一个类实例,RMI客户端需要有这个实例的接口代码(RMITestInterface.java),RMI客户端调用服务器端的RMI服务时会返回这个服务所绑定的对象引用,RMI客户端可以通过该引用对象调用远程的服务实现类的方法并获取方法执行结果。

    RMITestInterface示例代码:

    1. package com.anbai.sec.rmi;
    2. import java.rmi.Remote;
    3. import java.rmi.RemoteException;
    4. /**
    5. * RMI测试接口
    6. */
    7. public interface RMITestInterface extends Remote {
    8. /**
    9. * RMI测试方法
    10. *
    11. * @return 返回测试字符串
    12. */
    13. String test() throws RemoteException;
    14. }

    这个区别于普通的接口调用,这个接口在RMI客户端中没有实现代码,接口的实现代码在RMI服务端
    服务端RMITestInterface实现代码示例代码:
    **

    1. package com.anbai.sec.rmi;
    2. import java.rmi.RemoteException;
    3. import java.rmi.server.UnicastRemoteObject;
    4. public class RMITestImpl extends UnicastRemoteObject implements RMITestInterface {
    5. private static final long serialVersionUID = 1L;
    6. protected RMITestImpl() throws RemoteException {
    7. super();
    8. }
    9. /**
    10. * RMI测试方法
    11. *
    12. * @return 返回测试字符串
    13. */
    14. @Override
    15. public String test() throws RemoteException {
    16. return "Hello RMI~";
    17. }
    18. }

    RMI客户端示例代码:

    1. package com.anbai.sec.rmi;
    2. import java.rmi.Naming;
    3. import static com.anbai.sec.rmi.RMIServerTest.RMI_NAME;
    4. public class RMIClientTest {
    5. public static void main(String[] args) {
    6. try {
    7. // 查找远程RMI服务
    8. RMITestInterface rt = (RMITestInterface) Naming.lookup(RMI_NAME);
    9. // 调用远程接口RMITestInterface类的test方法
    10. String result = rt.test();
    11. // 输出RMI方法调用结果
    12. System.out.println(result);
    13. } catch (Exception e) {
    14. e.printStackTrace();
    15. }
    16. }
    17. }

    程序运行结果:

    1. Hello RMI~