zoukankan      html  css  js  c++  java
  • java RMI(远程方法调用)

    要实现java RMI,需要有以下几个步骤:

     

      1、生成一个远程接口

     

      2、实现远程对象(服务器端程序)

     

      3、编写服务器程序

     

      4、编写客户程序

     

      5、注册远程对象

     

      6、调用远程对象

    下面以一个简单计算器的实例说明:

      1、生成一个远程接口

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

    //接口必须继承自java.rmi.Remote;
    public interface ICalculator extends Remote {
     //声明接口方法,每一个远程调用方法必须抛出java.rmi.RemoteException异常
     public float add(float a,float b) throws RemoteException;
     public float sub(float a,float b) throws RemoteException;
     public float mult(float a,float b) throws RemoteException;
     public float divide(float a,float b) throws RemoteException;
    }

      2、实现远程对象(服务器端程序)

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

    //服务实现类必须继承自import java.rmi.server.UnicastRemoteObject;
    public class CalculatorImpl extends UnicastRemoteObject implements ICalculator {

     public CalculatorImpl() throws RemoteException{
      super();
     }
     @Override
     public float add(float a, float b) throws RemoteException {
      // TODO Auto-generated method stub
      return a + b;
     }

     @Override
     public float sub(float a, float b) throws RemoteException {
      // TODO Auto-generated method stub
      return a - b;
     }

     @Override
     public float mult(float a, float b) throws RemoteException {
      // TODO Auto-generated method stub
      return a*b;
     }

     @Override
     public float divide(float a, float b) throws RemoteException {
      // TODO Auto-generated method stub
      return a/b;
     }
    }

      3、编写服务器程序

    import javax.naming.InitialContext;

    public class CalcServer {
     public static void main(String[] args){
      try {
       CalculatorImpl cal = new CalculatorImpl();
       javax.naming.Context context =  new InitialContext();
       context.bind("rmi://localhost:1099/CalculatorService", cal);
       System.out.println("server started...");
      } catch (Exception e) {
       // TODO: handle exception
       e.printStackTrace();
      }
     }
    }

      4、编写客户程序

    import javax.naming.Context;
    import javax.naming.InitialContext;


    public class CalcClient {
     public static void main(String[] args){
      try {
       Context context = new InitialContext();
       //查找远程对象并调用远程方法
       ICalculator cal = (ICalculator)context.lookup("rmi://localhost:1099/CalculatorService");
       System.out.println(cal.add(1, 2));
       System.out.println(cal.sub(1, 2));
       System.out.println(cal.mult(1, 2));
       System.out.println(cal.divide(1, 2));
      } catch (Exception e) {
       // TODO: handle exception
       e.printStackTrace();
      }
     }
    }
      5、注册远程对象

    打开命令提示符,启动rmi注册程序:start rmiregistry回车,将弹出一个rmiregistry.exe窗口。

    图片

    切换到.class文件所在的目录,注册并启动远程对象:java CalcServer

    将打印server started...

    图片

      6、调用远程对象

    打开命令提示符,切换到.class文件所在的目录,调用客户端程序java CalcClient,将打印如下内容:

    3.0

    -1.0

    2.0

    0.5

     图片

  • 相关阅读:
    mysql自定义函数多表更新:update_order_relation()
    mysql自定义函数初始化数据:init_data()
    关于tomcat启动错误:At least one JAR was scanned for TLDs yet contained no TLDs
    intellij debug模式提示 Method breakpoints may dramatically slow down debugging
    Linux开机启动流程详细步骤是什么?
    chkconfig 添加脚本开机自启动
    优化SSH配置(一键完成增加若干参数)
    linux目录整理
    linux命令整理
    buffer和cache有什么区别?
  • 原文地址:https://www.cnblogs.com/kane1990/p/2293959.html
Copyright © 2011-2022 走看看