public class CalculatorServer implements Calculator { public String calculate(String expr) throws RemoteException { return expr; } public void start() throws RemoteException, AlreadyBoundException { Calculator stub = (Calculator) UnicastRemoteObject.exportObject(this, 0); Registry registry = LocateRegistry.getRegistry(); registry.rebind("Calculator", stub); } }
CalculatorServer是远程对象的Java类。在它的start方法中通过UnicastRemoteObject的exportObject把当前对象暴露出来,使得它可以接收来自客户端的调用请求。再通过Registry的rebind方法进行注册,使得客户端可以查找到。
客户端的实现就是首先从注册表中查找到远程接口的实现对象,再调用相应的方法即可。实际的调用虽然是在服务器端完成的,但是在客户端看来,这个接口中的方法就好像是在当前JVM中一样。这就是RMI的强大之处。
public class CalculatorClient { public void calculate(String expr) { try { Registry registry = LocateRegistry.getRegistry("localhost"); Calculator calculator = (Calculator) registry.lookup("Calculator"); String result = calculator.calculate(expr); System.out.println(result); } catch (Exception e) { e.printStackTrace(); } } }
相关推荐
但在Java 5.0中,我们可以直接使用`UnicastRemoteObject.exportObject()`静态方法,简化了代码。以下是一个简单的服务器启动示例: ```java import java.rmi.registry.Registry; import java.rmi.registry....
- **实现类中的代码**:要使一个类能够被远程调用,需要确保该类实现了 `java.rmi.Remote` 接口,并且在某处调用了 `UnicastRemoteObject.exportObject()` 方法来导出远程对象。 - **选项解析**: 1. 在实现类的...
3. **导出远程对象**:通过`UnicastRemoteObject.exportObject()`方法将远程对象导出到网络,获取其`Remote`引用。 ```java MyRemoteInterface remote = new MyRemoteImpl(); Remote stub = UnicastRemoteObject....
远程对象的实现需要继承`java.rmi.server.UnicastRemoteObject`或使用`UnicastRemoteObject.exportObject()`方法来暴露对象。 2. **客户端**:首先,通过RMI注册表查找远程对象的引用,然后就可以调用其上的方法了...
3. **导出远程对象**:创建`MyRemoteServiceImpl`的实例,然后通过`UnicastRemoteObject.exportObject()`方法导出为远程对象。 ```java MyRemoteServiceImpl service = new MyRemoteServiceImpl(); MyRemoteService...
4. **导出远程对象**:使用`java.rmi.server.UnicastRemoteObject.exportObject()`方法导出远程对象,生成Stub。 5. **获取远程对象引用**:客户端通过`java.rmi.Naming.lookup()`或`Registry.lookup()`方法获取...
为了使该对象能够被远程访问,需要使用`UnicastRemoteObject.exportObject()`方法导出对象,并绑定到一个名字上: ```java PerfectTime service = new PerfectTimeImpl("Server Time"); Naming.rebind("//localhost...
stub = (Remote) UnicastRemoteObject.exportObject(dataAllFace, dataPort);// 0表示端口随机生成. if (registry == null) registry = LocateRegistry.createRegistry(port, new ...
3. **导出远程对象**:通过调用`UnicastRemoteObject.exportObject()`方法将远程对象导出到网络,这将返回一个引用,可以将其注册到RMI注册表。 4. **注册远程对象**:使用`java.rmi.Naming`类的静态方法`bind()`将...
在RMI中,此类需要通过`java.rmi.server.UnicastRemoteObject`扩展或使用`UnicastRemoteObject.exportObject()`方法导出,使其成为远程可访问的对象。 `StudentServer.java`是服务器端的程序,负责启动RMI服务并...
5. **服务器端**:服务器端需要启动RMI注册表,并通过`UnicastRemoteObject.exportObject()`方法导出远程对象,将其注册到注册表中。 在这个"TestOfRMI_java"程序中,我们可以预见到以下步骤: - 创建远程接口和它...
如果自定义了一个类而不是直接扩展`UnicastRemoteObject`,为了使它成为`RemoteObject`,需要在实现类的构造函数中调用`UnicastRemoteObject.exportObject(this)`方法,将当前实例导出为远程对象。 2. J2EE部署描述...
实验要求中提到,你需要清晰解释关键代码的作用,例如 `LocateRegistry.createRegistry()`、`registry.bind()`、`UnicastRemoteObject.exportObject()` 等。同时,你需要自定义远程对象的功能,这可能包括添加业务...
5. **服务器(Server)**:服务器负责创建远程对象的实例,并将其导出到网络上,通常是通过`UnicastRemoteObject.exportObject(remoteObj)`完成的。 6. ** stubs 和 skeletons**:在早期版本的RMI中,需要手动生成...
5. **导出远程对象**:使用`java.rmi.server.UnicastRemoteObject.exportObject()`方法导出远程对象,使它成为远程可访问的。 6. **查找并调用远程对象**:在客户端,使用`java.rmi.Naming.lookup()`方法查找远程...
2. 创建并导出远程对象:创建远程对象实例,然后通过`UnicastRemoteObject.exportObject()`方法将其导出,使其可以在网络上被访问。 3. 在注册表中注册:将导出的远程对象注册到RMI注册表中,通常使用`Naming.rebind...
4. **导出服务**:通过`UnicastRemoteObject.exportObject()` 将实现类导出为远程对象,使其可以被远程访问。 5. **创建客户端**:在客户端,使用`Naming.lookup()` 查找并获取服务器端的服务对象。 6. **调用方法**...
4. **启动服务器**:使用`java.rmi.server.UnicastRemoteObject.exportObject()`方法将远程对象导出到网络,并启动RMI服务器。 客户端操作包括: 1. **查找远程对象**:客户端通过RMI注册表查找远程对象,可以使用...
3. **注册远程对象**:通过`UnicastRemoteObject.exportObject()`将远程对象暴露给网络,然后在注册服务中绑定该对象。例如,`reg.bind("serviceName", remoteObject);` 4. **客户端调用**:客户端通过注册服务查找...
1. **注册远程对象**:首先,我们需要创建一个实现了特定接口的远程对象,并使用`UnicastRemoteObject.exportObject()`方法将其导出,这使得远程对象可以被网络访问。然后,将这个远程对象注册到RMI注册表中,这样...