在Java中,遠程方法調用(Remote Method Invocation,簡稱RMI)是一種計算機通信協議。它允許運行在一臺計算機上的程序調用另一臺計算機上的子程序,就像調用本地程序一樣,無需額外了解底層網絡協議。以下是實現Java RMI的基本步驟:
java.rmi.Remote
接口,并聲明了要從遠程客戶端調用的方法。這些方法還必須聲明拋出java.rmi.RemoteException
異常。import java.rmi.Remote;
import java.rmi.RemoteException;
public interface MyRemoteInterface extends Remote {
String sayHello() throws RemoteException;
}
java.rmi.server.UnicastRemoteObject
類,并重寫exportObject()
和newClient()
方法。import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class MyRemoteInterfaceImpl extends UnicastRemoteObject implements MyRemoteInterface {
public MyRemoteInterfaceImpl() throws RemoteException {
super();
}
@Override
public String sayHello() throws RemoteException {
return "Hello, I'm a remote object!";
}
}
java.rmi.registry.Registry
接口的類,并重寫lookup()
方法。然后,您需要實例化此類的對象并將其綁定到RMI注冊表中。import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class Server {
public static void main(String[] args) {
try {
MyRemoteInterface remoteObject = new MyRemoteInterfaceImpl();
Registry registry = LocateRegistry.createRegistry(1099);
registry.bind("MyRemoteInterface", remoteObject);
System.out.println("Server is ready.");
} catch (Exception e) {
System.err.println("Server exception: " + e.toString());
e.printStackTrace();
}
}
}
java.rmi.Naming.lookup()
方法的類。然后,您可以使用此類的實例來調用遠程對象上的方法。import java.rmi.Naming;
public class Client {
public static void main(String[] args) {
try {
MyRemoteInterface remoteObject = (MyRemoteInterface) Naming.lookup("rmi://localhost:1099/MyRemoteInterface");
String result = remoteObject.sayHello();
System.out.println("Result from server: " + result);
} catch (Exception e) {
System.err.println("Client exception: " + e.toString());
e.printStackTrace();
}
}
}
現在,當您運行服務器和客戶端時,客戶端將能夠調用遠程對象上的sayHello()
方法,就像調用本地對象上的方法一樣。請注意,為了使這些示例正常工作,您需要將它們放在同一個網絡中的不同計算機上,并確保防火墻允許RMI通信。