Java RMI远程方法调用

简介:

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

 

 

你可能感兴趣的:(Java,协议)