利用RMI技术构建远程会话实验报告目录
1、引言
内容为:利用RMI技术构建远程会话:2个客户端发送消息到服务器端,服务器端把相应的消息中转发送给对应的客户,进行远程对话。
2、实验环境
- 操作系统:Windows 10
- 实验工具:IntelliJ IDEA
- 环境:Java jdk 1.8
3、实验过程
3.1 熟悉RMI技术原理
RMI基本原理图如下,应用了代理模式来封装了本地存根与真实的远程对象进行通信的细节。
3.2熟悉RMI技术构建远程会话之“Hello world”例子
3.2.1 创建远程接口,接口定义了所有的提供远程服务的功能
远程接口需要继承java.rmi.Remote接口;
接口中的所有方法声明抛出java.rmi.RemoteException;
package rmi_test;
import java.rmi.*;
public interface Hello extends java.rmi.Remote{
String sayHello(String name) throws java.rmi.RemoteException;
}
3.2.2 创建远程类,实现远程接口,是远程服务的具体实现
package rmi_test;
import java.rmi.*;
import java.rmi.server.*;
public class HelloImpl implements Hello{
public HelloImpl(){
}
public String sayHello(String name){
return "Hello,"+name+"!";
}
}
3.2.3 创建服务器程序,Server类是一个简单的服务器
其中,通过UnicastRemoteObject.exportObject(obj,0)方法,将自身导出为远程对象;
通过createRegistry()方法注册远程对象;
通过rebind方法,把远程对象绑定到指定名称空间中;
package rmi_test;
import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.server.*;
public class Server{
public Server() {
}
public static void main(String args[]) {
System.setSecurityManager(new RMISecurityManager());
final HelloImpl obj = new HelloImpl();
try {
// 0 - anonymous TCP port ↓
Hello stub = (Hello)UnicastRemoteObject.exportObject(obj, 0);
// Bind the remote object's stub in the registry
Registry registry = LocateRegistry.createRegistry(3333);
registry.rebind("Hello", stub);
for(int i = 0; i < registry.list().length; i++)
System.out.println(registry.list()[i]);
System.err.println("Server ready....");
System.err.println("Listinging on port 3333 ....");
} catch (Exception e) {
e.printStackTrace(