Rmi远程调用

不想再各种查一遍了,写个总结记录

编写被调用的程序

1.创建远程接口RemoteService,继承(extends)java.rmi.Remote,里面的抽象方法抛出java.rmi.RemoteException

2.创建实现类RemoteServiceImpl,继承java.rmi.server.UnicastRemoteObject,实现RemoteService

3.指定通信端口的类,本地调用可省略,远程调用需要指定

import java.rmi.server.*;
import java.io.*;
import java.net.*;

public class RMISocket extends RMISocketFactory {
	public Socket createSocket(String host, int port) throws IOException{
		return new Socket(host,port);
	}
	public ServerSocket createServerSocket(int port) throws IOException {
		if (port==0) port = 'XXXX';
		return new ServerSocket(port);
	}
}

XXXX为指定的通信端口号

4.注册程序的类Start.class,代码可直接写在main方法里:

try {
	RMISocketFactory.setSocketFactory(new RMISocket());//本地调用可省略
	RemoteService service=new RemoteServiceImpl();
	Context namingContext=new InitialContext();
	namingContext.rebind("rmi://xxx.xx.x.xxx:1099/name", service);
} catch (NamingException e) {
	e.printStackTrace();
}
xxx.xx.x.xxx为ip地址,name为注册名称,可自定义,此方法也要抛出java.rmi.RemoteException
注册被调用的程序

打开cmd

1.切换到程序的bin目录下
2.rmic cn.aaa.bbb.RemoteServiceImpl,完成后会在bin目录下生成一个RemoteServiceImpl_Stub.class文件
3.在bin目录下创建mypolicy.policy,内容
grant {   
permission java.security.AllPermission "", "";   //"", ""的内容可根据需要自定义
};
4.start rmiregistry(linux下是rmiregistery)
5.java -Djava.security.policy=mypolicy -Djava.ext.dirs=..\lib cn.aaa.bbb.Start

..\lib是被调用程序需要引用的jar目录,没有就不用写

打包被调用的程序

1.eclipse里直接右键export-jar file,其他默认下一步即可

2.将生成的jar file用压缩软件打开,将RemoteServiceImpl_Stub.class文件添加到RemoteServiceImpl同一目录下

编写调用的程序

1.将打包好的jar file添加到程序目录,并build path

2.调用的代码

try{
	RemoteService service=(RemoteService)Naming.lookup("rmi://xxx.xx.x.xxx:1099/name");
	result=service.method(param);
}catch(Exception e){
	e.printStackTrace();
}
注:远程调用,被调用的服务器需要打开端口1099和XXXX


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值