RMI 学习 ------第一个RMI程序

来源:互联网 发布:java人才需求 编辑:程序博客网 时间:2024/05/16 11:27

这是看网上例子写的,记录了编写过程和全部源代码

感觉不是一般的难用啊,配来配去的,不是很方便…………

RMI:使客户端能够调用调用服务器端的对象的方法。

先看一下服务器端的需要做的事情。
1 被客户端调用的类。
  这里包括两部分:
1 一个接口,定义了可以被客户端调用的方法。
2 一个类,实现了上面接口的类。

接口必须实现java.rmi.Remove

完整代码:
package com.hf.rmi.server.test;

 

import java.rmi.*;

public interface PerfectTimeI extends Remote {

    long getPerfectTime() throws RemoteException;

}
 

类:
package com.hf.rmi.server.test;

import java.rmi.*;

import java.rmi.server.*;

import java.rmi.registry.*;

import java.net.*;

public class PerfectTime extends UnicastRemoteObject implements PerfectTimeI {

public long getPerfectTime()

throws RemoteException {

return System.currentTimeMillis();

}

public PerfectTime() throws RemoteException {

super();

}

public static void main(String[] args) {

System.setSecurityManager(

new RMISecurityManager());

try {

PerfectTime pt = new PerfectTime();

Naming.rebind(

"//172.168.1.141:2005/PerfectTime" , pt);

System.out.println("Ready to do time");

} catch(Exception e) {

e.printStackTrace();

}

}

}

继承了UnicastRemoteObject并且实现了上面定义的接口。


为了方便,直接在当前类的main方法中创建了对象并启动了绑定


调用rmic命令创建stub
Rmic com.hf.rmi.server.test.PerfectTime

这就会生成两个类:PerfectTime_Skel.class,PerfectTime_Stub.class。其中第二个我们在客户端需要用到。

下面看一下客户端代码:

首先创建一个调用服务器端的类:
package com.hf.rmi.client.test;
 
import java.rmi.*;

import com.hf.rmi.server.test.PerfectTimeI;

 

public class DisplayPerfectTime {

public static void main(String[] args) {

System.setSecurityManager(

new RMISecurityManager());

try {

PerfectTimeI t =

(PerfectTimeI)Naming.lookup(

"rmi://172.168.1.141:2005/PerfectTime");

for(int i = 0 ; i < 10; i++)

System.out.println("Perfect time =" +

t.getPerfectTime());

} catch(Exception e) {

e.printStackTrace();

}

}

}

我们需要注意的是:在里面用到了PerfectTimeI 类。这个其实就是服务器端的那一个类。直接从服务器端拷过来就成了,注意要放到和服务器端相同的包下。
再将PerfectTime_Stub.class拷贝过来,也放置到同服务器端一致的位置上。

 


下面我们需要修改一下jdk的一些设置,

在jdk目录下的这个文件/YOUR_JDK_PATH/jre/lib/security/java.policy
的最后加入下面代码:
grant {
           permission java.net.SocketPermission "*:1024-65535",
                "connect,accept";
          permission java.net.SocketPermission "*:80","connect";


据说是开放了端口权限

 

接下来我们需要启动rmi

2 start rmiregistry 2005

运行服务器端程序:
cd D:/eclipse/workspace/RMIServer
进入服务器端路径
运行
Java -Djava.rmi.server.codebase=file:/D:/eclipse/workspace/RMIServer/  com.hf.rmi.server.test.PerfectTime
这里的“-Djava.rmi.server.codebase=file:/D:/eclipse/workspace/RMIServer/”主要是用来指定残根所在的位置。

这时候就会启动服务了。

 


cd D:/eclipse/workspace/RMIClient
运行 java com.hf.rmi.client.test.DisplayPerfectTime


 

 

 

原创粉丝点击