rmi远程方法调用

服务端

1.接口

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

public interface Fib extends Remote {

    /**
     * 定义远程方法
     * @param n
     * @return
     * @throws RemoteException
     */
    public int getFib(int n) throws RemoteException;
    
    public void getFib() throws RemoteException;
}

2.接口实现

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

public class FibImp extends UnicastRemoteObject implements Fib {

    private static final long serialVersionUID = 1L;

    protected FibImp() throws RemoteException {
        super();
    }

    @Override
    public int getFib(int n) throws RemoteException {
        return n+1;
    }

    @Override
    public void getFib() throws RemoteException {
        System.out.println("FibImp.getFib()");
    }

}

3.服务注册

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

public class FibonacciServer {

    public static void main(String[] args) {
        
        try {
            LocateRegistry.createRegistry(8804);
            
            Fib fib=new FibImp();
            try {
                Naming.bind("//localhost:8804/SAMPLE-SERVER", fib);
                System.out.println("fib server ready"); 
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (AlreadyBoundException e) {
                e.printStackTrace();
            }
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
}

客户端调用

1.客户端接口

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

public interface Fib extends Remote {

    /**
     * 定义远程方法
     * @param n
     * @return
     * @throws RemoteException
     */
    public int getFib(int n) throws RemoteException;
    
    public void getFib() throws RemoteException;
}

2.客户端实现

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

public class FibClient {

    public static void main(String[] args) {
        String url = "//localhost:8804/SAMPLE-SERVER";  
        try {
            Fib fib=(Fib) Naming.lookup(url);
//            for(int i=0;i<100;i++){
//                System.out.println(fib.getFib(i));;
//            }
        System.out.println(fib);
            fib.getFib();
        
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (RemoteException e) {
            e.printStackTrace();
        } catch (NotBoundException e) {
            e.printStackTrace();
        }
    }
}
原文地址:https://www.cnblogs.com/javaweb2/p/rmi.html