简介:
java RMI(Remote Method Invocation),java远程方法调用,能够让在某个 Java虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。这种机制给分布计算的系统设计、编程都带来了极大的方便。
简单例子:
1.定义远程接口
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Helloextends Remote{
public String sayHello(Stringname) throws RemoteException;
}
2.实现远程接口
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class HelloImpl extends UnicastRemoteObjectimplements Hello {
protected HelloImpl()throws RemoteException {
super();
}
@Override
public String sayHello(Stringname)throws RemoteException {
return name;
}
}
3.编写服务端
public class HelloServer {
public static void main(String[]args) {
try{
Hello h =new HelloImpl();
//创建并导出接受指定port请求的本地主机上的Registry实例。
//LocateRegistry.createRegistry(12312);
/** Naming 类提供在对象注册表中存储和获得远程对远程对象引用的方法
* Naming 类的每个方法都可将某个名称作为其一个参数,
* 该名称是使用以下形式的 URL 格式(没有 scheme 组件)的 java.lang.String:
* //host:port/name
* host:注册表所在的主机(远程或本地),省略则默认为本地主机
* port:是注册表接受调用的端口号,省略则默认为1099,RMI注册表registry使用的著名端口
* name:是未经注册表解释的简单字符串
*/
//Naming.bind("//host:port/name", h);
LocateRegistry.createRegistry(12312);
Naming.bind("rmi://localhost:12312/Hello",h);
System.out.println("HelloServer启动成功");
}catch(Exceptione){
e.printStackTrace();
}
}
}
4.编写客户端
import java.rmi.Naming;
public class HelloClient {
public static void main(String[]args) throws Exception {
Hello h = (Hello) Naming.lookup("rmi://localhost:12312/Hello");
System.out.println(h.sayHello("hello rmi"));
}
}
5.运行
5.1.需要调用rmic命令运行在HelloImpl的class文件
如果是eclipse中:在bin目录输入这段命令
rmic com.test.rmi.HelloImpl
5.2 运行服务端
java com.test.rmi.HelloServer
5.3 运行客户端
java com.test.rmi.HelloClient
打印输出:hello rmi