RMI介绍:
RMI(Remote Method Invocation,远程方法调用)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力。Java作为一种风靡一时的网络开发语言,其巨大的威力就体现在它强大的开发分布式网络应用的能力上,而RMI就是开发百分之百纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。但是传统RPC并不能很好地应用于分布式对象系统。而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。
--引用自搜搜百科
一、服务器端
1.新建一个Java项目“MyRmiService”;
2.建包“com.rmi.bin”;
3.建立一个主入口的接口“IRmiService.java”,并公开一个远程调用方法“hello”。代码如下:
package com.rmi.bin;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface IRmiService extends Remote {
/**
* 公开远程调用方法hello
* @param userName
* @return
*/
public String hello(String userName) throws RemoteException;
}
4.编写实现类“RmiService.java”,并覆写hello方法。代码如下:
package com.rmi.bin;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class RmiService extends UnicastRemoteObject implements IRmiService {
private static final long serialVersionUID = -8306441060593704819L;
protected RmiService() throws RemoteException {
super();
}
@Override
public String hello(String userName) throws RemoteException{
return "你好~"+userName+"!";
}
}
5.启动服务端。新建“StartService.java”。代码如下:
package com.rmi.bin;
import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
public class StartService {
public static void startService() {
String host ="127.0.0.1";//公开的ip地址
String port ="8999";//公开的端口
try {
IRmiService service = new RmiService();
LocateRegistry.createRegistry(Integer.valueOf(port));// 本地主机上的远程对象注册表Registry的实例,并指定端口为8999
// 把远程对象注册到RMI注册服务器上,并命名为RmiService
// 绑定的URL标准格式为:rmi://host:port/name(其中协议名可以省略,下面两种写法都是正确的)
Naming.bind("rmi://" + host + ":" + port + "/RmiService", service);
System.out.println(">>>>>INFO:远程RmiService对象绑定成功!");
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (AlreadyBoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
startService();
}
}
6.运行main方法。运行结果如下图:
二、客户端
1.新建一个Java项目“MyRmiClient”;
2.建包“com.rmi.bin”;(和服务器端一致)
3.建立一个主入口的接口“IRmiService.java”,并公开一个远程调用方法“hello”。代码如下:
package com.rmi.bin;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface IRmiService extends Remote {
/**
* 公开远程调用方法hello
* @param userName
* @return
*/
public String hello(String userName) throws RemoteException;
}
4.调用服务端hello接口。代码如下:
package com.rmi.bin;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.Remote;
import java.rmi.RemoteException;
public class LinkService {
/**
* 调用远程Hello方法
* @param userName
* @throws RemoteException
*/
public static void linkHello(String userName) throws RemoteException {
String host = "127.0.0.1";
String port = "8999";
try {
Remote remote = Naming.lookup("rmi://" + host + ":" + port
+ "/RmiService");
if (remote instanceof IRmiService) {
IRmiService rmiService = (IRmiService) remote;
String result = rmiService.hello(userName);
System.out.println(result);
}
} catch (NotBoundException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
linkHello("lion");
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
5.运行客户端main方法,调用结果如下:
至此,一个简单的RMI服务端和客户端搭建完毕!(源代码已公布,请在“附件下载”中下载)
转载于:https://blog.51cto.com/liyongyao/1205723