rmi java_Java 使用RMI

本文详细介绍了如何使用Java标准库实现RMI,包括服务端的HelloServer结构、接口定义、HelloImpl的实现,以及客户端的简单调用。通过序列化实现在分布式环境中远程方法调用,展示了解耦调用和实现的架构优势。
摘要由CSDN通过智能技术生成

Java 使用RMI

Java使用序列化的方式,可以实现远端的方法调用,在分工合作时非常方便。本文记录使用java标准库实现rmi

一、服务端

结构

.

├── pom.xml

├── src

│   ├── main

│   │   └── java

│   │   └── hello

│   │   ├── HelloImpl.java

│   │   ├── HelloServer.java

│   │   └── IHello.java

│   └── test

│   └── java

│   └── mycom

│   └── AppTest.java

└── target

IHello.java

package hello;

import java.rmi.Remote;

import java.rmi.RemoteException;

public interface IHello extends Remote {

public String sayHelloToSomeBody(String someBodyName) throws RemoteException;

HelloImpl.java

package hello;

import java.rmi.RemoteException;

import java.rmi.server.UnicastRemoteObject;

public class HelloImpl extends UnicastRemoteObject implements IHello {

public HelloImpl() throws RemoteException {

super();

}

public String sayHelloToSomeBody(String someBodyName) throws RemoteException {

System.out.println("Connected sucessfully!");

return "你好," + someBodyName + "!";

}

}

HelloServer.java

package hello;

import java.net.MalformedURLException;

import java.rmi.AlreadyBoundException;

import java.rmi.Naming;

import java.rmi.RemoteException;

import java.rmi.registry.LocateRegistry;

public class HelloServer {

public static void main(String args[]) {

try {

IHello rhello = new HelloImpl();

LocateRegistry.createRegistry(8888);

// 如果配置在远程服务器,把地址换成你的ip

System.setProperty("java.rmi.server.hostname","127.0.0.1");

Naming.bind("rmi://localhost:8888/RHello", rhello);

System.out.println(">>>>>INFO:远程IHello对象绑定成功!");

} catch (RemoteException e) {

System.out.println("创建远程对象发生异常!");

e.printStackTrace();

} catch (AlreadyBoundException e) {

System.out.println("发生重复绑定对象异常!");

e.printStackTrace();

} catch (MalformedURLException e) {

System.out.println("发生URL畸形异常!");

e.printStackTrace();

}

}

}

在服务端启动HelloServer.java就会在8888端口监听请求了

二、客户端

客户端只要分享接口文件就好了

启动代码

package hello;

import java.net.MalformedURLException;

import java.rmi.Naming;

import java.rmi.NotBoundException;

import java.rmi.RemoteException;

public class Client {

public static void main(String args[]) {

try {

// 填写服务器ip

IHello rhello = (IHello) Naming.lookup("rmi://127.0.0.1:8888/RHello");

System.out.println(rhello.sayHelloToSomeBody("Erich"));

} catch (NotBoundException e) {

} catch (MalformedURLException e) {

e.printStackTrace();

e.printStackTrace();

} catch (RemoteException e) {

e.printStackTrace();

}

}

}

三、小结

可以看到,客户端只要得到接口文件就能执行操作,而具体的实现交给服务端完成,这种架构可以解耦调用和实现

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值