RMI远程访问
看Head First 设计模式时讲到RMI,感觉书上整个流程不是很好懂。自己整理下代码。
代码结构:
RMI |MyRemote.java |server | MyRemoteImpl.java |client | MyRemoteClient.java
公共接口
感觉stub 和 skeleton就是服务器和客户机的公共访问
import java.rmi.*;
public interface MyRemote extends Remote{
public String sayHello() throws RemoteException;
}
编译生成的class文件要分别拷贝到 server, client 文件, 服务器类和客户机类javac 要依赖该class文件。
服务器
import java.rmi.*;
import java.rmi.server.*;
public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote{
public String sayHello(){
return "Server says, 'Hey'";
}
public MyRemoteImpl() throws RemoteException{}
public static void main(String []args){
try{
MyRemote service = new MyRemoteImpl();
Naming.rebind("RemoteHello", service);
}catch(Exception ex){
ex.printStackTrace();
}
}
}
* 服务器运行前要先执行rmiregistry*
客户端
import java.rmi.*;
public class MyRemoteClient{
public static void main(String []args){
new MyRemoteClient().go();
}
public void go(){
try{
MyRemote service = (MyRemote)Naming.lookup("rmi://127.0.0.1/RemoteHello");
String s = service.sayHello();
System.out.println(s);
}catch(Exception ex){
ex.printStackTrace();
}
}
}
运行结果
- 未启动服务器会有异
- 注册
- 服务器
- 客户端