Java RMI学习入门小案例

来源:互联网 发布:激战2一折商城网络延迟 编辑:程序博客网 时间:2024/06/07 22:33

RMI远程方法调用,服务器端客户端得用Java。

在服务器端建一个远程接口并写个实现类,最后写个主类发布出去。

接口类:

package com.gg.rmi.Interface;import java.rmi.Remote;import java.rmi.RemoteException;//定义一个远程接口,必须继承Remote接口,其中需要远程调用的方法必须抛出RemoteException异常 public interface Hello extends Remote { /**      * 简单的返回“Hello World!"字样      * @return 返回“Hello World!"字样      * @throws java.rmi.RemoteException      */public String helloWorld()throws RemoteException;/**      * 一个简单的业务方法,根据传入的人名返回相应的问候语      * @param someBodyName  人名      * @return 返回相应的问候语      * @throws java.rmi.RemoteException      */     public String sayHelloToSomeBody(String someBodyName) throws RemoteException;}

实现类:

package com.gg.rmi.server;import java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;import com.gg.rmi.Interface.Hello;public class HelloImpl extends UnicastRemoteObject implements Hello {protected HelloImpl() throws RemoteException {super();System.out.println("HelloIml初始化。。。");}@Overridepublic String helloWorld() throws RemoteException {System.out.println("调用HelloWorld方法");return "Hello world";}@Overridepublic String sayHelloToSomeBody(String someBodyName)throws RemoteException {System.out.println("调用sayHelloWorldToSomeBody方法");return "你好," + someBodyName + "!";}}

主类;

package com.gg.rmi.server;import java.net.MalformedURLException;import java.rmi.AlreadyBoundException;import java.rmi.Naming;import java.rmi.RemoteException;import java.rmi.registry.LocateRegistry;import com.gg.rmi.Interface.Hello;public class HelloServer {public static void main(String args[]) {         try {             //创建一个远程对象             Hello rhello = new HelloImpl();             //本地主机上的远程对象注册表Registry的实例,并指定端口为8888,这一步必不可少(Java默认端口是1099),必不可缺的一步,缺少注册表创建,则无法绑定对象到远程注册表上             LocateRegistry.createRegistry(8888);             //把远程对象注册到RMI注册服务器上,并命名为RHello             //绑定的URL标准格式为:rmi://host:port/name(其中协议名可以省略,下面两种写法都是正确的)             Naming.bind("rmi://localhost:8888/RHello",rhello); //            Naming.bind("//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();         }     } }
在客户端上:

package com.gg.rmi.client;import java.net.MalformedURLException;import java.rmi.Naming;import java.rmi.NotBoundException;import java.rmi.RemoteException;import com.gg.rmi.Interface.Hello;public class HelloClient {public static void main(String args[]){         try {             //在RMI服务注册表中查找名称为RHello的对象,并调用其上的方法             Hello rhello =(Hello) Naming.lookup("rmi://localhost:8080/RHello"); //填主机的ip            System.out.println(rhello.helloWorld());             System.out.println(rhello.sayHelloToSomeBody("red-dragon"));         } catch (NotBoundException e) {             e.printStackTrace();         } catch (MalformedURLException e) {             e.printStackTrace();         } catch (RemoteException e) {             e.printStackTrace();           }     } }


遇到的问题:

解决方法:把接口类的包名内容一摸一样的放到客户端上.

0 0
原创粉丝点击