异地和本地Java RMI调用

今天要用异地访问java某个类,用到了Java RMI,到网络中搜索了一些资料,搜索不到关于异地的实例,都是关于本地的,乘着这个机会,写一下关于异地访问java某个类的实例。

步骤一:

1.定义一个远程接口的接口,该接口中的每一个方法必须声明它将产生一个RemoteException异常。

import java.rmi.Remote;   
import java.rmi.RemoteException;   
public interface myProject extends java.rmi.Remote   //需要从Remote继承   
{   
       public String myLongDistanceInterface() throws RemoteException;   //需要抛出remote异常   
}  
 

2、定义一个实现该接口的类。

import java.io.PrintStream;     
import java.rmi.*;     
import java.rmi.server.UnicastRemoteObject;     
       
public class actualizeMyProject extends UnicastRemoteObject   //必须从UnicastRemoteObject  implements myProject    
{     
        public actualizeMyProject() throws RemoteException     //需要一个抛出Remote异常的默认初始化方法     
        {     
         }     
      
        public String myLongDistanceInterface()     //这个是实现myProject接口的方法     
        {     
            return "恭喜你,我被你抓到了!";     
        }     
 }   
 

在执行第三个步骤之前,先理解一下以下概念:

在RMI中,客户机上生成的调动调用参数和反调动返回值的代码称为残根。有的书上称这部分代码为“主干”。
服务器上生成的反调动调用参数和进行实际方法调用调动返回值的代码称为框架。

3、使用RMIC程序生成远程实现所需的残根Stub 和 框架。
   2中的

actualizeMyProject

编译好以后,我们就可以用RMIC命令来生成残根Stub
   在Dos窗口里,到actualizeMyProject.class 所在目录,运行以下命令:
   rmic actualizeMyProject

4、创建一个服务器。

 

dsf

sdsdf

dsf

import java.rmi.*;
public class RMI_Server
{
    public static void main(String[] args)
    {
        try
        {
            actualizeMyProject  actualizeMyProject  = new actualizeMyProject ();                //实例化要发布的类
            Naming.rebind("RMI_actualizeMyProject ", actualizeMyProject );      //绑定RMI名称 进行发布
            System.out.println(">>>>> RMI_Server
 Ready <<<<< ");
        }
        catch(Exception exception)
        {
            exception.printStackTrace();
        }
    }
}
 

5. 创建一个客户程序进行RMI调用。

import java.rmi.*;
public class RMI_Client {
    public static void main(String[] args) {
        try
        {
           myProject myProject = (myProject) Naming.lookup("rmi://192.168.1.158:1099/RMI_actualizeMyProject");  //通过RMI名称查找远程对象
            System.out.println(myProject.myLongDistanceInterface());                        //调用远程对象的方法
        } catch (Exception e)
        {
          e.printStackTrace();
        }
    }

}

 程序到这里基本上已经完成了,下面的步骤也不能轻易略过,不然程序是跑不起来。

6.服务端的工作。

先在DOS下运行 rmiregistry     这个命令是开启RMI的注册服务。接下来,运行我们的RMI_Server类才能调用rebing方法发布我们的类。运行我们的server程序  RMI_Server    这里是最容易出错的,参见下面注意事项。

注意:
         如果提示找不到Stub类,这个需要用下面的命令来运行
java.exe -Djava.rmi.server.codebase=file:/C:\ /  RMI_Server

(有时候有Stub类,就是找不到,我也不知道为什么,呵呵)

蓝字部分指定了stub类的路径。

7.客户端的工作。

如果是在本地调用的话,直接启动就行啦,在这里,我主要说一下异地调用的注意几点。

把接口类、客户端类和生成的Stub类复制到客户机。运行客户端类。在控制台会出现“

恭喜你,我被你抓到了!

”。表示你已经成功调用到。

完毕!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值