JAVA RMI

本文翻译自: Java RMI Tutorial
创建Rrmote Method Invoke共需要4个对象。
通俗的说分别为: 1.远程服务器端的真正的对象,2.远程服务器端的帮助对象;3.客户端的访问对象,4.客户端的帮助对象。
其中2个帮助对象 用于封装底层的网络交互,以及保证和处理不同JVM间的使用同一个对象的完整性。
远程服务器端的帮助对象为:Skeleton      客户端的帮助对象:Stub
客户端要访问服务器上对象的方法实际上是先通过 访问 本地的帮助对象(Stub),同理要访问服务器端真正对象的方法必须要先和Skeleton 交互。所以客户端的一个用户调用服务器端的一个方法实际上是通过了2个代理对象才最后真正调用了目的方法。
----------------------
1.创建 server 端的 Interface 并 extends Remote
///////////////////////////
package server;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface HelloInterface extends Remote
{
    public String say()throws RemoteException;
}
/////////////////////////////////
    创建接口实现类,继承UnicastRemoteObject 并 实现server 端的Interface
    /////////////////////////////////
package server;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class Hello extends UnicastRemoteObject implements HelloInterface
{
private String message;
public Hello(String msg)throws RemoteException
{
    message=msg;
}
    private static final long serialVersionUID = -4497383228004817199L;

    public String say() throws RemoteException
    {
        return message;
    }
}
/////////////////////////////////
2.注册 该实现类为 服务器端的 Skeleton. 方法为: rmic server.Hello//其中Hello 为 实现类名,实际中需要加上完整的package
3.编写客户端代码:
////////////////////////////////////////////////////
package client;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

import server.HelloInterface;

public class Client
{
    public static void main(String[] args)
    {
        try
        {
            HelloInterface hello=(HelloInterface)Naming.lookup("//localhost/Hello");
            System.out.println(hello.say());
        } catch (MalformedURLException e)
        {
            e.printStackTrace();
        } catch (RemoteException e)
        {
            e.printStackTrace();
        } catch (NotBoundException e)
        {
            e.printStackTrace();
        }
    }
}
////////////////////////////////////////////////////
4.编写服务器端的代码:服务器端的代码为绑定 具体的远程对象名
////////////////////////////////////////////////////
package server;

import java.rmi.Naming;

public class Server
{
    public static void main(String[] args)
    {
        try
        {
            Naming.rebind("Hello",new Hello("Hello,World!"));
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}
////////////////////////////////////////////////////
5.启动服务.
a。新建cmd窗口到所在的classpath。输入:rmiregistry
注册远程对象。
b。再新建cmd窗口启动server端:java server.Server
///////////////////////////////
6.客户端访问.
新建cmd窗口.模拟客户端: java client.Client
////////////////
完成!
----------效果如下

你可能感兴趣的:(java,jvm,.net)