`
sunasheng
  • 浏览: 120019 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Java实现远程访问(RMI-Naming)

阅读更多

Java实现远程访问(RMI-Naming

1,编写服务器接口

新建项目:ITest,编写接口IServer ,有几点有求:

(1)接口必须实现类Remote

(2)接口中的方法必须抛出异常RemoteException

package cn.sun.server;

 

import java.rmi.Remote;

import java.rmi.RemoteException;

 

public interface IServer extends Remote{

int add(int a,int b)throws RemoteException;

}

2,编写实现端

新建项目:ImplTest,编写实现类ServerImpl有几点有求:

(1)实现类必须继承类UnicastRemoteObject  

(2)必须有空的实现且抛出异常RemoteException 

package cn.sun.impl;

 

import java.rmi.RemoteException;

import java.rmi.server.UnicastRemoteObject;

import cn.sun.server.IServer;

 

public class ServerImpl extends UnicastRemoteObject implements IServer {

public ServerImpl() throws RemoteException {

}

public int add(int a, int b) {

return a+b;

}

}

注意:此工程中的接口的实现要依赖于工程ITest中的接口,所以本工程必须从build path中导入工程ITest,具体方法如下:在工程名ImplTest上点击右键选择Build Path,选择Configure Build Path,在Projects这一项中Add项目ITest

3,编写容器端

说明:接口和实现类都是运行在服务器端的,所以要有一个容器来运行接口和实现类,所以也要开启容器的服务。

新建项目:Host,编写容器类Host,开启服务有几个步骤:

(1)通过类LocateRegistry的方法createRegistry(port)来绑定端口

(2)实例化接口IServer iServer = new ServerImpl();

(3)将实例绑定到接服务中,通过Namingrebind("//127.0.0.1:1009/绑定名" , 所绑定的实例)方法实现;

package cn.sun.host;

 

import cn.sun.impl.ServerImpl;

import cn.sun.server.IServer;

import java.rmi.Naming;

import java.rmi.registry.LocateRegistry;

public class Host {

public static void main(String[] args)throws Exception

{

LocateRegistry.createRegistry(1009);//绑定端口

IServer iServer = new ServerImpl();

Naming.rebind("//127.0.0.1:1009/iServer" , iServer);

}

}

注意:此工程中的容器的实现要依赖于工程ITest中的接口和工程ImplTest中的实现类,所以本工程必须从build path中导入工程ITest和工程ImplTest,具体方法跟上面类似。

4,编写客户端

说明:客户端是运行在客户端服务器的,所以对于服务器上的程序要进行远程访问。

新建项目:Client,编写客户端类Client,实现远程访问有几个步骤:

(1)通过Naming类的lookup(//IP:port/绑定名)方法来远程获取接口的实例

(2)通过接口的实例就可以调用接口实现中的方法

package cn.sun.client;

import java.rmi.Naming;

import cn.sun.server.IServer;

public class Client {

public static void main(String [] args)throws Exception

{

IServer iServer = (IServer)Naming.lookup("//127.0.0.1:1009/iServer");

System.out.println(iServer.add(5, 6));

}

}

注意:此工程中的远程访问的实现只需依赖于工程ITest中的接口,所以本工程必须从build path中导入工程ITest,具体方法跟上面类似。

5,程序的运行

(1)运行Host工程中的Host类中的main方法(开启服务器端容器的服务)

(2)运行客户端

 

 

分享到:
评论

相关推荐

    Java分布式处理技术RMI,JNDI,

    2. 实现远程接口:远程对象实现类必须扩展远程对象 java.rmi.UnicastRemoteObject 类,并实现所定义的远程接口。 JNDI(Java Naming and Directory Interface)是 Java 平台上的一个目录服务,它提供了一个统一的...

    java jdk-api-1.6 中文 chmd

    javax.management.remote 对 JMX MBean 服务器进行远程访问使用的接口。 javax.management.remote.rmi RMI 连接器是供 JMX Remote API 使用的一种连接器,后者使用 RMI 将客户端请求传输到远程 MBean 服务器。 ...

    JAVA_API1.6文档(中文)

    javax.management.remote 对 JMX MBean 服务器进行远程访问使用的接口。 javax.management.remote.rmi RMI 连接器是供 JMX Remote API 使用的一种连接器,后者使用 RMI 将客户端请求传输到远程 MBean 服务器。 ...

    Java 1.6 API 中文 New

    javax.management.remote 对 JMX MBean 服务器进行远程访问使用的接口。 javax.management.remote.rmi RMI 连接器是供 JMX Remote API 使用的一种连接器,后者使用 RMI 将客户端请求传输到远程 MBean 服务器。 javax...

    java api最新7.0

    javax.management.remote 对 JMX MBean 服务器进行远程访问使用的接口。 javax.management.remote.rmi RMI 连接器是供 JMX Remote API 使用的一种连接器,后者使用 RMI 将客户端请求传输到远程 MBean 服务器。 javax...

    JavaAPI1.6中文chm文档 part1

    javax.management.remote 对 JMX MBean 服务器进行远程访问使用的接口。 javax.management.remote.rmi RMI 连接器是供 JMX Remote API 使用的一种连接器,后者使用 RMI 将客户端请求传输到远程 MBean 服务器。 ...

    JavaAPI中文chm文档 part2

    javax.management.remote 对 JMX MBean 服务器进行远程访问使用的接口。 javax.management.remote.rmi RMI 连接器是供 JMX Remote API 使用的一种连接器,后者使用 RMI 将客户端请求传输到远程 MBean 服务器。 ...

    [Java参考文档]

    javax.management.remote 对 JMX MBean 服务器进行远程访问使用的接口。 javax.management.remote.rmi RMI 连接器是供 JMX Remote API 使用的一种连接器,后者使用 RMI 将客户端请求传输到远程 MBean 服务器。 ...

    [Java参考文档].JDK_API 1.6

    javax.management.remote 对 JMX MBean 服务器进行远程访问使用的接口。 javax.management.remote.rmi RMI 连接器是供 JMX Remote API 使用的一种连接器,后者使用 RMI 将客户端请求传输到远程 MBean 服务器。 javax...

    JDK_1_6 API

    javax.management.remote 对 JMX MBean 服务器进行远程访问使用的接口。 javax.management.remote.rmi RMI 连接器是供 JMX Remote API 使用的一种连接器,后者使用 RMI 将客户端请求传输到远程 MBean 服务器。 ...

    S24-C3P0反序列化1

    ROME是Java中的一个JNDI(Java Naming and Directory Interface)实现,提供了对LDAP、DNS、RMI等协议的支持。ROME也存在反序列化漏洞,攻击者可以利用该漏洞实现远程代码执行。 ysoserial是Java中的一个反序列化...

    java 面试题 总结

    它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是...

    超级有影响力霸气的Java面试题大全文档

    它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是...

Global site tag (gtag.js) - Google Analytics