一、生成接口继承自 java.rmi.Remote,方法必须抛出RemoteException异常
package RMI;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface MyRmi extends Remote{
double getMy() throws RemoteException;
}
二、实现该接口,并继承java.rmi.server.UnicastRemoteObject(必须),构造方法和实现接口的方法必须抛出RemoteException异常
package RMI;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class MyRmiImpl extends UnicastRemoteObject implements MyRmi{
public double s=0.0;
protected MyRmiImpl() throws RemoteException {
s=s+1;
}
public double getS() {
return s;
}
public void setS(double s) {
this.s = s;
}
@Override
public double getMy() throws RemoteException{
return getS();
}
}
三、服务端
package RMI;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class WarehouseServer {
public static void main(String[] args) throws NamingException, RemoteException, NotBoundException {
System.out.println("构造");
MyRmiImpl myRmiImpl= new MyRmiImpl();
myRmiImpl.setS(4.2);
System.out.println("绑定");
Registry registry= LocateRegistry.createRegistry(6663);
Context context= new InitialContext();
context.bind("rmi://localhost:6663/myRmi",myRmiImpl);
System.out.println("等待客户端");
}
}
四、客户端
package RMI;
import java.rmi.RemoteException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class WarehouseClient {
public static void main(String[] args) throws NamingException, RemoteException {
Context namingContext=new InitialContext();
String url="rmi://localhost:6663/myRmi";
MyRmi myRmi= (MyRmi) namingContext.lookup(url);
System.out.println(myRmi.getMy());
}
}
客户端结果: