大概流程就是服务器端启动服务,给外界提供数据访问的接口,然后指明自己的ip地址和端口号。接着客户端拿过这个接口,根据服务端的连接条件操作。最后建立连接拿到数据。
1.服务器这边建个简单的java project - RMIService项目
2.客户端这边建个简单的java project - RMIClient项目
基本框架:
代码实现:
1.服务器端MyServier 接口类->`package zhong.service;
import java.rmi.Remote;
import java.rmi.RemoteException;
/*
- 服务接口必须要继承UnicasteRemoteObject类
*/
public interface MyServier extends Remote {
public String sayHello(String name) throws RemoteException;
public int calc(int a ,int b ) throws RemoteException;
}`
2.服务器端MyServierImpl 实现类->
package zhong.service.impl;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import zhong.service.MyServier;
/*
* 服务接口必须要继承UnicasteRemoteObject类
*/
public class MyServiceImpl extends UnicastRemoteObject implements MyServier {
public MyServiceImpl() throws RemoteException {
super();
// TODO Auto-generated constructor stub
}
@Override
public String sayHello(String name) throws RemoteException {
String result = name+"你好!欢迎调用服务方法...";
return result;
}
@Override
public int calc(int a, int b) throws RemoteException {
int result = (a+b)*10;
return result;
}
}
3.服务器端发布类->
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
import zhong.service.MyServier;
import zhong.service.impl.MyServiceImpl;
/**
* 我的服务器
* @author Administrator
*
*/
public class MyService {
public static void main(String[] args) {
// 把服务注册到网络上
try {
//服务对象的创建
MyServier servier = new MyServiceImpl();
System.out.println("服务器启动。。。");
//发布服务
LocateRegistry.createRegistry(43210);
//rmi:协议 172.17.1.56:主机地址 7000:端口 service:是服务名称,--指定访问的服务
Naming.bind("rmi://172.17.1.56:43210/service", servier);
} catch (Exception e) {
e.getStackTrace();
}
}
}
启动服务器后通过电脑cmd进去命令窗口执行netstat命令,可以看到自己的服务
4.客户端接收服务器MyServier 接口类->
package zhong.service;
import java.rmi.Remote;
import java.rmi.RemoteException;
/*
* 服务接口必须要继承UnicasteRemoteObject类
* 客户端类要拿到这个接口,然后根据接口获取操作获取服务器放的数据
*/
public interface MyServier extends Remote {
public String sayHello(String name) throws RemoteException;
public int calc(int a ,int b ) throws RemoteException;
}
5.客户端连接类MyClient ->
package com.icss.main;
import java.rmi.Naming;
import zhong.service.MyServier;
public class MyClient {
public static void main(String[] args) {
try {
//根据服务端的ip和端口及服务的名称获取连接对象,然后调用里面的方法操作就ok
MyServier servier =(MyServier) Naming.lookup("rmi://172.17.1.56:43210/service");
String str=servier.sayHello("zhong5");
System.out.println(str);
int num=servier.calc(120, 13);
System.out.println("num="+num);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
大致效果: