Java RMI 示例

Java RMI Demo-- Java RMI 示例
本文给出了一个Java RMI的示例,其中注册过程是使用Registry

本例子包含了共4个文件,分别是HelloClient,Hello,HelloServer,config.properti

/*Hello.java*/

package rmi.cn.riil.demo;

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

/**
 *
 * @author ZB
 *
 */
public interface Hello extends Remote {

    String sayHello() throws RemoteException;

}


/*HelloServer*/

package rmi.cn.riil.demo;

import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import java.util.ResourceBundle;

/**
 *
 * @author ZB
 *
 */
public class HelloServer extends UnicastRemoteObject implements Hello {
    private static final long serialVersionUID = 1L;
    String name;

    public HelloServer(String s) throws RemoteException {
        super();
        name = s;
    }

    public String sayHello() throws RemoteException {
        return "Hello world!";
    }

    public static void main(String[] args) {
        /**
         * 下面这句话若要加上,则需要进行权限的认证,即增加.policy文件 并且在命令行中使用如下格式 java
         * -Djava.security.policy=java.policy test.rmi.HelloServer
         */
        /* System.setSecurityManager(new RMISecurityManager()); */
        Registry registry = null;
        ResourceBundle resource = ResourceBundle.getBundle("config");
        try {
            /**
             * 启动注册服务器,使用了这个语句就不再需要在命令行环境中 启动registry服务了
             */
            registry = LocateRegistry.getRegistry();
            /* 若没有获得连接,则此句会抛出异常,后面在捕获后进行相关处理 */
            registry.list();
            System.out.println("Register the exist server!");
        } catch (RemoteException re) {
            try {
                int port = Integer.parseInt(resource.getString("HelloServer.RegistryServerPort"));
                registry = LocateRegistry.createRegistry(port);
                System.out.println("Create Registry Server!");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        try {
            HelloServer helloServer = new HelloServer("Hello");
            registry.rebind(resource.getString("HelloServer.HelloServerName"), helloServer); //$NON-NLS-1$
            System.out.println("HelloServer server start!"); //$NON-NLS-1$
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


/*HelloClient*/

package rmi.cn.riil.demo;

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.ResourceBundle;

/**
 *
 * @author ZB
 *
 */
public class HelloClient {

    public static void main(String[] args) {
        try {
            ResourceBundle resource = ResourceBundle.getBundle("config");
            /* 注册服务器 */
            String hostName = resource.getString("HelloServer.RegistryServerName");
            int port = Integer.parseInt(resource.getString("HelloServer.RegistryServerPort"));
            Registry registry = LocateRegistry.getRegistry(hostName, port);

            Hello hello = (Hello) registry.lookup(resource.getString("HelloServer.HelloServerName"));
            String message = hello.sayHello();
            System.out.println(message);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

#config.properties
HelloServer.RegistryServerPort=1111
HelloServer.HelloServerName=HelloServer
HelloServer.RegistryServerName=127.0.0.1


首先运行HelloServer服务器 java test.rmi.HelloServer,提示


最后运行HelloClient客户端 java test.rmi.HelloClient
屏幕输出HelloWorld,这样,一个最简单的rmi远程调用成功了

猜你喜欢

转载自blog.csdn.net/nimqbiyq/article/details/81096381