-
首先要新建两个文件:文件1.Server 文件2.Client
-
扩展Remote接口
import java.rmi.*;
public interface RemoteSubject extends Remote {
public void setHeight(double height) throws RemoteException;
public void setWidth(double width) throws RemoteException;
public double getArea() throws RemoteException;
}
该接口需保存在Server文件目录中,并将它编译生成.class文件,同时将生成的.class文件复制到Client文件目录下
- 创建远程对象
double width,height;
public RemoteConcreteSubject() throws RemoteException {
}
public void setWidth(double width)throws RemoteException {
this.width = width;
}
public void setHeight(double height)throws RemoteException{
this.height = height;
}
public double getArea() throws RemoteException {
return width*height;
}
}
将RemoteConcreteSubject.java文件保存在服务器的Server目录下,并将该文件进行编译生成.class文件
- RMI使用rmic命令生成存根(Stub),进入Server目录,执行以下命令:
rmic RemoteConcreteSubject
客户端需要使用存根创建一个对象,即远程代理,所以RemoteConcreteSubject_Stub.class文件需要复制一份到Client目录下
-
启动注册:rmiregistry
在Server目录下执行rmiregistry命令 -
启动远程对象服务
-
服务端主程序代码:
import java.rmi.*;
public class BindRemoteObject {
public static void main(String args[]) {
try{
RemoteConcreteSubject remoteObject = new RemoteConcreteSubject();
Naming.rebind("rmi://127.0.0.1/rect",remoteObject);
System.out.println("be ready for client server...");
}
catch(Exception exp) {
System.out.println(exp);
exp.printStackTrace();
}
}
}
将BindRemoteObject.java保存到Server目录下,并编译生成相应的.class文件,然后运行BindRemoteObject
- 运行客户端程序
客户端主程序代码:
import java.rmi.*;
public class ClientApplication{
public static void main(String args[]){
try{
Remote remoteObject=Naming.lookup("rmi://127.0.0.1/rect");
RemoteSubject remoteSubject= (RemoteSubject)remoteObject;
remoteSubject.setWidth(129);
remoteSubject.setHeight(528);
double area=remoteSubject.getArea();
System.out.println("面积:"+area);
}
catch(Exception exp){
System.out.println(exp.toString());
}
}
}
将ClientApplication.java保存在Client目录下,并将其编译运行
总结一下步骤:
1.创建编译Remote接口
2.编译远程对象RemoteConcreteSubject.java
3.生成存根
4.启动注册rmiregistry
4.启动远程对象,就是编译服务端代码
6.就是编译客户端程序