【JAVA】RMI远程控制访问对象代码示例

一、 简介


* RMI将客户辅助对象称为stub(桩),服务辅助对象称为skeleton(骨架)


二、 制作远程服务


1.   制作远程接口

2.  制作远程的实现

3.  利用rmic产生stub和skeleton

4.  启动RMI registry(rmiregistry)

5.  开始远程服务


三、 代码展示


1.  编译代码

|--E:\android\workspace\HeadFirstDesignPatterns_code102507\HF_DP\src\headfirst\proxy\gumball_Manualtest\Server>javac *.java
|--E:\android\workspace\HeadFirstDesignPatterns_code102507\HF_DP\src\headfirst\proxy\gumball_Manualtest\Server>rmic GumballMachine
|--将GumballMachineRemote.class、GumballMachine_Stub.class拷贝到客户端目录下
|--E:\android\workspace\HeadFirstDesignPatterns_code102507\HF_DP\src\headfirst\proxy\gumball_Manualtest\Client>javac *.java

2.  运行效果

|--启动RMI注册服务:E:\android\workspace\HeadFirstDesignPatterns_code102507\HF_DP\src\headfirst\proxy\gumball_Manualtest\Server>rmiregistry		
|--启动服务:E:\android\workspace\HeadFirstDesignPatterns_code102507\HF_DP\src\headfirst\proxy\gumball_Manualtest\Server>java GumballMachineTestDrive 127.0.0.1 100
|--启动客户端:E:\android\workspace\HeadFirstDesignPatterns_code102507\HF_DP\src\headfirst\proxy\gumball_Manualtest\Client>java GumballMonitorTestDrive 127.0.0.1
		GumballMonitor@2d502d
		Gumball Machine: 127.0.0.1
		Current inventory: 100 gumballs
		Current state: waiting for quarter

四、 问题解决


1.  rmic 找不到类

解决办法: 需要在CLASSPATH 添加路径:pc路径\gumball_Manualtest\Server 和 pc路径\gumball_Manualtest\Client


五、 示例代码下载

http://download.csdn.net/detail/u011471135/9310225


Java可以用于实现远程控制,具体实现方式可以采用Socket编程或者RMI(远程方法调用)技术。以下是一些简单的示例代码: 使用Socket编程实现远程控制: ```java // 服务端代码 import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) { try { ServerSocket serverSocket = new ServerSocket(8888); System.out.println("等待客户端连接..."); Socket socket = serverSocket.accept(); System.out.println("客户端已连接:" + socket.getInetAddress()); ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream()); ObjectInputStream in = new ObjectInputStream(socket.getInputStream()); while (true) { String message = (String) in.readObject(); if ("exit".equalsIgnoreCase(message)) { break; } System.out.println("收到客户端消息:" + message); out.writeObject("服务端已收到消息:" + message); } in.close(); out.close(); socket.close(); serverSocket.close(); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } } // 客户端代码 import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.Socket; import java.util.Scanner; public class Client { public static void main(String[] args) { try { Socket socket = new Socket("localhost", 8888); System.out.println("已连接到服务器:" + socket.getInetAddress()); ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream()); ObjectInputStream in = new ObjectInputStream(socket.getInputStream()); Scanner scanner = new Scanner(System.in); while (true) { System.out.print("请输入消息:"); String message = scanner.nextLine(); out.writeObject(message); String response = (String) in.readObject(); System.out.println("收到服务端回复:" + response); if ("exit".equalsIgnoreCase(message)) { break; } } in.close(); out.close(); socket.close(); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } } ``` 使用RMI实现远程控制: ```java // 定义远程接口 import java.rmi.Remote; import java.rmi.RemoteException; public interface RemoteService extends Remote { String sayHello(String name) throws RemoteException; } // 实现远程接口 import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; public class RemoteServiceImpl extends UnicastRemoteObject implements RemoteService { protected RemoteServiceImpl() throws RemoteException { super(); } @Override public String sayHello(String name) throws RemoteException { return "Hello, " + name + "!"; } } // 服务端代码 import java.rmi.Naming; import java.rmi.registry.LocateRegistry; public class Server { public static void main(String[] args) { try { LocateRegistry.createRegistry(1099); RemoteServiceImpl service = new RemoteServiceImpl(); Naming.rebind("RemoteService", service); System.out.println("服务已启动"); } catch (Exception e) { e.printStackTrace(); } } } // 客户端代码 import java.rmi.Naming; public class Client { public static void main(String[] args) { try { RemoteService service = (RemoteService) Naming.lookup("rmi://localhost/RemoteService"); String response = service.sayHello("World"); System.out.println(response); } catch (Exception e) { e.printStackTrace(); } } } ``` 以上代码仅作为示例,实际应用需要根据具体需求进行修改和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值