RMI的实现
1.编写一个远程接口
/** * 远程接口 */ public interface TestInterfactRemote extends Remote{ public String add(String a,String b) throws RemoteException; public String add() throws RemoteException; }
2.编写接口的实现类
public class TestInterfaceRemoteImpl extends UnicastRemoteObject implements TestInterfactRemote { public TestInterfaceRemoteImpl() throws RemoteException { super(); } public String add(String a, String b) throws RemoteException { return a + b; } public String add() throws RemoteException { return "Hello Word"; } }
3.编写服务端程序
/** * 服务器端 */ public class Server{ public Server() { try { TestInterfactRemote testInterfactRemote = new TestInterfaceRemoteImpl(); LocateRegistry.createRegistry(8800); Naming.rebind("rmi://127.0.0.1:8800/server", testInterfactRemote); System.out.println("Service Start!"); } catch (Exception e) { e.printStackTrace(); } } public static void main(String args[]) { new Server(); } }
4.编写客户端程序
/** * 客户端程序 */ public class Client { public static void main(String args[]) { try { TestInterfactRemote testInterfactRemote = (TestInterfactRemote) Naming .lookup("rmi://127.0.0.1:8800/server"); System.out.println(testInterfactRemote.add("rmi a ", "rmib")); } catch (Exception e) { e.printStackTrace(); } } }
IPC的实现过程与RMI很类似
1、编写远程接口
public class IPCFileStatus implements Writable { private String filename; private long time; public IPCFileStatus() { } public IPCFileStatus(String filename) { this.filename=filename; this.time=(new Date()).getTime(); } public String getFilename() { return filename; } public void setFilename(String filename) { this.filename = filename; } public long getTime() { return time; } public void setTime(long time) { this.time = time; } public String toString() { return "File: "+filename+" Create at "+(new Date(time)); } @Override public void readFields(DataInput in) throws IOException { this.filename = Text.readString(in); this.time = in.readLong(); } @Override public void write(DataOutput out) throws IOException { Text.writeString(out, filename); out.writeLong(time); } }
import org.apache.hadoop.ipc.VersionedProtocol; public interface IPCQueryStatus extends VersionedProtocol{ public static final long versionID = 1L; public IPCFileStatus getFileStatus(String fileName); }
2、编写接口的实现类
public class IPCQueryStatusImpl implements IPCQueryStatus { public IPCQueryStatusImpl() {} @Override public IPCFileStatus getFileStatus(String filename) { IPCFileStatus status=new IPCFileStatus(filename); System.out.println("Method getFileStatus Called, return: "+status); return status; } /** * 用于服务器与客户端,进行IPC接口版本检查,再服务器返回给客户端时调用,如果服务器端的IPC版本与客户端不一致 * 那么就会抛出版本不一致的异常 */ @Override public long getProtocolVersion(String protocol, long clientVersion) throws IOException { System.out.println("protocol: "+protocol); System.out.println("clientVersion: "+clientVersion); return IPCQueryStatus.versionID; } @Override public ProtocolSignature getProtocolSignature(String arg0, long arg1, int arg2) throws IOException { return new ProtocolSignature(IPCQueryStatus.versionID, null); } }
3、编写服务端程序
public class IPCQueryServer { public static final int IPC_PORT = 32121; public static final long IPC_VER = 5473L; public static void main(String[] args) { try { Configuration conf = new Configuration(); // IPCQueryStatusImpl queryService=new IPCQueryStatusImpl(); System.out.println(conf); Server server = new RPC.Builder(conf).setProtocol(IPCQueryStatus.class) .setInstance(new IPCQueryStatusImpl()).setBindAddress("127.0.0.1").setPort(7777) .setNumHandlers(5).setVerbose(true).build(); server.start(); System.out.println("Server ready, press any key to stop"); System.in.read(); server.stop(); System.out.println("Server stopped"); } catch (Exception e) { e.printStackTrace(); } } }
4、编写客户端程序
public class IPCQueryClient { public static void main(String[] args) { try { System.out.println("Interface name: "+IPCQueryStatus.class.getName()); System.out.println("Interface name: "+IPCQueryStatus.class.getMethod("getFileStatus", String.class).getName()); InetSocketAddress addr=new InetSocketAddress("localhost", 7777); IPCQueryStatus query = null; // RPC.getProxy(IPCQueryStatus.class, clientVersion, addr, conf) query = RPC.getProxy(IPCQueryStatus.class, IPCQueryServer.IPC_VER, addr,new Configuration()); IPCFileStatus status=query.getFileStatus("/tmp/testIPC"); System.out.println(status); RPC.stopProxy(query); } catch (Exception e) { e.printStackTrace(); } } }
相关推荐
JavaRMI的原理和实现方法 分布式对象计算 来源于青岛大学学报
一个简单的RMI实现,可实现方法的远程调用,是学习RMI很好的入门资料。
RMI简单实例RMI简单实例RMI简单实例
Java中RMI的实现机制Java中RMI的实现机制Java中RMI的实现机制Java中RMI的实现机制
用RMI实现的查询天气程序 简单的java实现
基于HTTP隧道的Java RMI设计与实现.pdf
java RMI技术实现的网络聊天室 编译通过,很完整的。代码很有参考价值
用java的rmi实现的 远程调用。希望对阁下有用
利用rmi实现一个会议系统,可以添加,查询,删除会议,源码
java RMI实现代码。分为客户端和服务器端,有清楚的代码注释。
RMI远程方法的实现,客户端调用未添加
基于HTTP隧道的JavaRMI设计与实现
用RMI技术写成的聊天室,可以简单地进行会话,可以实现群聊功能。
(1) 编写RMI 程序 用RMI 构建一个分布式共享会议议程服务。不同的客户应该能够使用共享会议议 程服务,该服务提供会议的查询、增加和删除功能。会议议程服务器有允许用户注册和 撤销会议的功能。
RMI的JAVA实现 JAVA RMI
对 RMI 的简单理解
关于实现rmi 远程方法调用的功能!会议会晤安排系统!包含多个批处理文件!
java rmi java rmijava rmi javajava rmi java rmi rmi
使用rmi实现远程调用 多个客户端 一个服务端对话
rmi与spring整合实例