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)将实例绑定到接服务中,通过Naming类的rebind("//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)运行客户端