跳到主要内容

写Java代码实现RMI的案例 ?

参考答案:

当使用Java实现RMI(Remote Method Invocation,远程方法调用)时,需要遵循以下步骤:

  1. 定义远程接口:首先,需要定义一个远程接口,该接口将声明要远程调用的方法。这个接口需要扩展java.rmi.Remote接口,并且每个远程方法都需要抛出java.rmi.RemoteException异常。
import java.rmi.Remote;
import java.rmi.RemoteException;

public interface RemoteCalculator extends Remote {
    public int add(int a, int b) throws RemoteException;
    public int subtract(int a, int b) throws RemoteException;
    public int multiply(int a, int b) throws RemoteException;
    public int divide(int a, int b) throws RemoteException;
}
  1. 实现远程接口:接下来,需要实现上面定义的远程接口。在实现类中,需要实现接口中声明的所有方法,并且每个方法都需要抛出RemoteException异常。
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class CalculatorImpl extends UnicastRemoteObject implements RemoteCalculator {
    public CalculatorImpl() throws RemoteException {
        super();
    }

    public int add(int a, int b) throws RemoteException {
        return a + b;
    }

    public int subtract(int a, int b) throws RemoteException {
        return a - b;
    }

    public int multiply(int a, int b) throws RemoteException {
        return a * b;
    }

    public int divide(int a, int b) throws RemoteException {
        if (b == 0) {
            throw new IllegalArgumentException("Divisor cannot be zero");
        }
        return a / b;
    }
}
  1. 注册远程对象:为了让客户端能够调用远程方法,需要将远程对象绑定到一个名称上,并将该名称注册到RMI注册表中。这可以通过java.rmi.Naming类的rebind()方法实现。
import java.rmi.Naming;

public class CalculatorServer {
    public static void main(String[] args) {
        try {
            RemoteCalculator calculator = new CalculatorImpl();
            Naming.rebind("rmi://localhost/calculator", calculator);
            System.out.println("Calculator server started.");
        } catch (Exception e) {
            System.err.println("Calculator server exception: " + e.toString());
            e.printStackTrace();
        }
    }
}
  1. 编写客户端代码:客户端代码需要使用Naming.lookup()方法从RMI注册表中查找远程对象,并调用其远程方法。
import java.rmi.Naming;

public class CalculatorClient {
    public static void main(String[] args) {
        try {
            RemoteCalculator calculator = (RemoteCalculator) Naming.lookup("rmi://localhost/calculator");
            System.out.println("5 + 3 = " + calculator.add(5, 3));
            System.out.println("10 - 4 = " + calculator.subtract(10, 4));
            System.out.println("6 * 7 = " + calculator.multiply(6, 7));
            System.out.println("20 / 5 = " + calculator.divide(20, 5));
        } catch (Exception e) {
            System.err.println("Calculator client exception: " + e.toString());
            e.printStackTrace();
        }
    }
}

以上是一个简单的RMI案例,其中定义了一个远程计算器接口,实现了该接口,并将实现类注册到RMI注册表中。客户端从注册表中查找远程对象,并调用其远程方法进行计算。注意,为了使用RMI,需要在命令行中使用java.rmi.server.rmiregistry启动RMI注册表,并且需要在启动客户端和服务器之前设置Java安全策略文件。