Java RMI入门详细搭建过程
RMI:远程方法调用(Remote Method Invocation)。能够让A电脑的java虚拟机上的对象调用B电脑的java 虚拟机中的对象上的方法。类似于websocket的远程调用所需代码客户端代码:链接: https://pan.baidu.com/s/1t5DaLvbNzbRikVYBWrDa_Q 密码: iptcRmiTestClient- - rmi...
RMI:远程方法调用(Remote Method Invocation)。能够让A电脑的java虚拟机上的对象调用B电脑的java 虚拟机中的对象上的方法。类似于websocket的远程调用
所需代码
客户端代码:链接: https://pan.baidu.com/s/1t5DaLvbNzbRikVYBWrDa_Q 密码: iptc
RmiTestClient
- - rmi
- - - - client
- - - - - - HelloClient.java
- - - - server
- - - - - - Hello.java
客户端代码,服务器地址根据具体的ip所定,端口任意
package rmi.client;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import rmi.server.Hello;
public class HelloClient {
public static void main(String[] args) {
try {
Hello h = (Hello)Naming.lookup("rmi://192.168.1.19:12312/Hello");
System.out.println(h.sayHello("xxxx"));
} catch (MalformedURLException e) {
System.out.println("url格式异常");
} catch (RemoteException e) {
System.out.println("创建对象异常");
e.printStackTrace();
} catch (NotBoundException e) {
System.out.println("对象未绑定");
}
}
}
所调接口
package rmi.server;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Hello extends Remote {
String sayHello(String name) throws RemoteException;
}
服务端代码:链接: https://pan.baidu.com/s/1tmX7EnDK3UahWOAz_1vw1Q 密码: m2ti
RmiTestServer
- - rmi
- - - - server
- - - - - - Hello.java
- - - - - - HelloImpl.java
- - - - - - HelloServer.java
接口
package rmi.server;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Hello extends Remote {
String sayHello(String name) throws RemoteException;
}
实现
package rmi.server;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class HelloImpl extends UnicastRemoteObject implements Hello {
private static final long serialVersionUID = 1L;
public HelloImpl() throws RemoteException {
super();
}
@Override
public String sayHello(String name) throws RemoteException {
return "hello, " + name;
}
}
服务端代码,服务器地址根据具体的ip所定,端口任意
package rmi.server;
import java.rmi.Naming;
public class HelloServer {
public static void main(String[] args) {
try{
Hello h = new HelloImpl();
Naming.bind("rmi://192.168.1.19:12312/Hello", h);
System.out.println("HelloServer启动成功");
}catch(Exception e){
e.printStackTrace();
}
}
}
环境装备
客户端和服务端的搭建
客户端为windows系统,服务端为ubantu系统
ubantu下载与安装(virtualBox)参考:https://blog.csdn.net/dengjili/article/details/77828935
windows控制虚拟机linux参考:https://blog.csdn.net/dengjili/article/details/77998255
查看服务器地址
配置/etc/hosts文件
- 将hostname对应ip修改为当前ip
- 验证命令hostname -i
客户端ping服务端网络是否通
服务端代码部署
将代码上传到服务器
windows与虚拟机linux文件传输参考:https://blog.csdn.net/dengjili/article/details/78006151
编译服务端代码
ubantu安装java环境参考:https://blog.csdn.net/dengjili/article/details/79744472
进入工程,编译java文件生成class文件
执行命令
javac rmi/server/*.java
生成rmi所需要的stub文件
配置classpath
查询当前工程目录
将当前目录添加进classpath中
执行命令,修改
sudo vim /etc/profile
在工程目录,执行命令
rmic rmi.server.HelloImpl
生成文件
编译客户端代码
进入客户端路径
ps:当前为windows系统
执行命令
javac -encoding UTF-8 rmi/client/*.java
javac -encoding UTF-8 rmi/server/*.java
执行结果
将服务器stub文件拷贝到客户端对应位置
操作后
启动RMI注册服务
特别重要
当前操作目录一定要在服务器代码的工程目录执行
执行命令
rmiregistry 12312 &
运行服务端
执行命令
java rmi.server.HelloServer
注意事项
当ctrl+c结束当前程序,再次执行启动命令会报错
解决方法,重新进行RMI注册服务
执行命令
ps -ef | grep rmiregistry
kill进程,执行命令
kill 1690
重新操作即可成功
运行客户端
执行命令
java rmi.client.HelloClient
更多推荐
所有评论(0)