1. 程式人生 > >Java中RMI遠端呼叫方法

Java中RMI遠端呼叫方法

之前有兩篇文章是關於RPC的,Java中的RMI則是一種特殊的RPC實現方式,都是遠端方法呼叫,即客戶端可以呼叫伺服器端的方法

下面實現一個Java RMI

1.建立遠端介面類RmiTest.java

package cn.ysjh;

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

public interface RMITest extends Remote {

    public String test() throws RemoteException;

}

2.建立實現遠端介面的類RmiTestImpl.java

package cn.ysjh;

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

public class RMITestImpl extends UnicastRemoteObject implements RMITest {

    public RMITestImpl() throws RemoteException {
        super();
    }
    public String test() {

        return "hello world!";

    }
}

3.構建伺服器端Server.java

package cn.ysjh;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;

public class Server {

    public Server() {
        try {
            RMITestImpl rmiTest = new RMITestImpl();
            LocateRegistry.createRegistry(8880);
            try {
                Naming.rebind("rmi://localhost:8880/Service",rmiTest);
                System.out.println("Server start.......");
            } catch (MalformedURLException e) {
                e.printStackTrace();
            }
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args){

        new Server();

    }

}

4.構建客戶端Client.java

package cn.ysjh;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.rmi.RemoteException;

public class Client {

    public static void main(String[] args) throws RemoteException {
        try {
            InitialContext context = new InitialContext();
            RMITest lookup = (RMITest) context.lookup("rmi://localhost:8880/Service");
            System.out.println("Client start...");
            System.out.println(lookup.test());
        } catch (NamingException e) {
            e.printStackTrace();
        }
    }

}

 

執行時先執行伺服器端Server.java,然後再執行客戶端Client.java

 

執行效果截圖: