简单远程访问
首先我们学习下简单的客户端远程访问服务端的例子.
这里用到了 Java RMI (Remote Method Invocation)
Java RMI是一种机制, 是能够让一个 java虚拟机 调用 另一个java 虚拟机上对象的方法, 从而实现远程访问.
但是通过客户端实现该远程访问,必须绑定一个远程接口对象(意味着客户端可以访问到的服务端上的方法必须全部包含在这个接口里).
定义远程接口
首先,我们需要写个远程接口HelloInterface 该接口继承了远程对象Remote.
接口HelloInterface里面有个sayHello的方法,用于客户端连接后 打招呼.
由于sayHello方法继承了远程Remote对象, 所以需要抛一个 RemoteException 远程异常.
package Remote_Interface;
import java.rmi.Remote;
import java.rmi.RemoteException;
/**
* 接口HelloInterface 继承了 远程接口 Remote 用于客户端Client远程调用
* @author SoFlash - 博客园 http://www.cnblogs.com/longwu
*/
public interface HelloInterface extends Remote{
public String sayHello(String name) throws RemoteException;
}
实现接口(实现接口在服务端)
接下来,我们实现下 该接口里的方法, 实现接口的方法在服务端.
这里的HelloInterfaceImpl类 实现了接口HelloInterface里的方法.
注意:这里HelloInterfaceImpl 同样继承了 UnicastRemoteObject 远程对象,这个必须写,虽然不写 代码智能提示不会提示有错,但服务端启动后会莫名其妙报错.
由于 UnicastRemoteObject 远程对象 需要抛出一个RemoteException 异常, 所以这里用了一个构造方法 HelloInterfaceImpl() 来抛这个异常.
package Server;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import Remote_Interface.HelloInterface;
/**
* HelloInterfaceImpl 用于实现 接口HelloInterface 的远程 SayHello方法
* @author SoFlash - 博客园 http://www.cnblogs.com/longwu
*/
@SuppressWarnings("serial")
// 继承 UnicastRemoteObject 远程对象 这个一定要写 否则 服务端启动报异常
public class HelloInterfaceImpl extends UnicastRemoteObject implements HelloInterface{
//HelloInterfaceImpl的构造方法 用于抛出UnicastRemoteObject 远程对象里的异常
protected HelloInterfaceImpl() throws RemoteException {
}
public String sayHello(String name) throws RemoteException {
//该信息 在客户端上发出
String strHello = "你好! " + name+" 欢迎访问服务端!";
//这条信息 是在服务端上 打印出来
System.out.println(name +" 正在 访问本服务端!");
return strHello;
}
}
编写服务端
接下来,我们来写 服务端,由于RMI 实现远程访问的机制是指:客户端通过在RMI注册表上寻找远程接口对象的地址(服务端地址) 达到实现远程访问的目的,
所以,我们需要在 服务端 创建一个远程对象的注册表,用于绑定和注册 服务端地址 和 远程接口对象,便于后期客户端能够成功找到服务端 (详细请看代码注释).
package Server;
import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import Remote_Interface.HelloInterface;
/**
* Server 类 用于 启动 注册服务端
* @author SoFlash - 博客园 http://www.cnblogs.com/longwu
*/
public class Server {
public static void main(String[] args) {
try {
// 定义远程接口HelloInterface 对象 用于绑定在服务端注册表上 该接口由HelloInterfaceImpl()类实现
HelloInterface hInterface = new HelloInterfaceImpl();
int port = 6666; // 定义一个端口号
// 创建一个接受对特定端口调用的远程对象注册表 注册表上需要接口一个指定的端口号
LocateRegistry.createRegistry(port);
// 定义 服务端远程地址 URL格式
String address = "rmi://localhost:" + port + "/hello";
// 绑定远程地址和接口对象
Naming.bind(address,hInterface);
// 如果启动成功 则弹出如下信息
System.out.println(">>>服务端启动成功");
System.out.println(">>>请启动客户端进行连接访问");
} catch (MalformedURLException e) {
System.out.println("地址出现错误!");
e.printStackTrace();
} catch (AlreadyBoundException e) {
System.out.println("重复绑定了同一个远程对象!");
e.printStackTrace();
} catch (RemoteException e) {
System.out.println("创建远程对象出现错误!");
e.printStackTrace();
}
}
}
编写客户端
服务端写完了,我们来写下访问服务端需要的客户端.
客户端上同样需要定义一个 远程访问的地址 - 即服务端地址,
然后,通过在RMI注册表上寻找 该地址; 如果找到 则建立连接.
package Client;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import Remote_Interface.HelloInterface;
/**
* Client 用于连接 并访问 服务端Server
* @author SoFlash - 博客园 http://www.cnblogs.com/longwu
*/
public class Client {
public static void main(String[] args) {
// 定义一个端口号 该端口号必须与服务端的端口号相同
int port = 6666;
// 同样定义一个远程地址 该地址为服务端的远程地址 所以 与服务端的地址是一样的
String address = "rmi://localhost:" + port + "/hello";
// 在RMI注册表上需找 对象为HelloInterface的地址 即服务端地址
try {
HelloInterface hInterface = (HelloInterface) Naming.lookup(address);
// 一旦客户端找到该服务端地址 则 进行连接
System.out.println("<<<客户端访问成功!");
//客户端 Client 调用 远程接口里的 sayHello 方法 并打印出来
System.out.println(hInterface.sayHello("SoFlash"));
} catch (MalformedURLException e) {
System.out.println("错误的地址!");
e.printStackTrace();
} catch (RemoteException e) {
System.out.println("创建远程对象出错!");
e.printStackTrace();
} catch (NotBoundException e) {
System.out.println("未绑定的远程对象!");
e.printStackTrace();
}
}
}
图片
分享到:
相关推荐
"JAVA代码实现远程操作服务器文件" Titulo: JAVA代码实现远程操作服务器文件 JAVA代码实现远程操作服务器文件是指使用JAVA语言实现远程操作服务器文件的功能,实现FTP,共享文件夹操作。该功能可以实现远程服务器...
Java远程桌面连接是一种技术,允许用户通过网络访问和控制远程计算机的桌面环境,类似于Windows操作系统中的Remote Desktop Protocol (RDP)。在Java中,我们通常使用Java Remote Method Invocation (Java RMI) 或 ...
### Java远程调试操作步骤 #### 一、准备工作 在进行Java远程调试之前,我们需要完成一些必要的准备工作,确保环境配置正确。 ##### 1.1 安装JCE无限制策略文件 根据描述中的“下载UnlimitedJCEPolicyJDK8”,这...
// 实现远程操作 } } ``` 3. **注册远程对象**:在服务器端,我们需要将远程对象注册到RMI注册表中,这样客户端才能找到并调用它。 ```java Registry registry = LocateRegistry.createRegistry(1099); // 默认...
Java远程控制程序是一种技术,允许一个程序或系统在另一台计算机上执行操作,这在分布式系统、网络管理和自动化任务执行中非常常见。Java提供了一种跨平台的方式来实现远程控制,利用其内置的Java Remote Method ...
(java 中实现对 access 数据库的远程访问) java 中实现对 access 数据库的远程访问是指在 java 中通过远程访问 access 数据库,以满足项目中的需求。在实际项目中,可能会遇到这样的问题:A 服务器上的应用程序需要...
在IT行业中,远程桌面功能是不可或缺的一部分,它允许用户通过网络连接到另一台计算机并进行交互操作。在Java编程环境中,实现这样的功能可以借助各种库和框架。本篇将深入探讨如何利用`properJavaRDP`这个开源项目...
本项目名为“基于Java远程监控软件”,显然,它采用Java编程语言来实现这一功能,这涉及到Java的网络编程、多线程、IO流等核心技术。下面将详细解析这些知识点。 首先,Java作为跨平台的编程语言,其Java SE(标准...
Java远程控制后端源码是实现远程操作和管理软件系统的一种技术,主要涉及Java RMI(Remote Method Invocation)和SSH(Secure Shell)等协议。在Java中,远程控制通常指的是通过网络连接到另一台计算机,并执行该...
### Java远程方法调用(RMI):深入解析与实践 #### 一、RMI概念与原理 Java远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种分布式计算模型,允许一个Java虚拟机(JVM)上的对象通过网络...
在IT行业中,有时我们需要在Java程序中实现自动化操作,例如远程控制其他计算机。"Java调用本地的远程桌面连接"这个话题就是关于如何利用Java编程语言来启动并配置本地的远程桌面连接(RDP,Remote Desktop Protocol...
Java远程桌面控制系统是一种利用网络通信技术实现的软件应用,它允许用户通过互联网或其他网络连接,对远程计算机进行操作和管理,仿佛直接坐在那台电脑前一样。这种系统通常基于TCP/IP协议栈,采用Socket通信机制来...
这篇名为“Java远程控制简单实现”的博客文章可能探讨了如何利用Java技术实现远程控制系统。远程控制通常涉及通过网络对远程计算机进行操作,这在系统管理、自动化任务执行以及分布式系统通信中非常常见。 首先,...
JAVA远程接口调用介绍 JAVA远程接口调用(RMI)是Java的一组API,用于开发分布式应用程序。RMI使用Java语言接口定义了远程对象,并集合了Java序列化和Java远程方法协议(Java Remote Method Protocol)。RMI使原先...
Java远程调用批处理文件是将Java编程与批处理脚本结合的一种技术,它允许Java程序执行在远程服务器上的批处理任务,而无需人工干预。这通常涉及到网络通信和进程间交互,使得分布式系统能够更加灵活地管理和调度任务...
5. **暴露JMX连接器**:通过JMXConnectorServer暴露JMX连接器,这允许远程客户端连接到服务器并进行管理操作。 6. **编写RMI客户端**:客户端通过RMI调用服务器端的接口,获取监控信息。这可能涉及到从...
7. **用户界面**:使用Java Swing或JavaFX库,开发者构建了用户友好的界面,使用户能够输入远程主机的IP地址和端口号,以及进行连接、断开等操作。 8. **性能优化**:为了提高性能和减少带宽消耗,可能采用了屏幕...
它允许一个对象在某个Java虚拟机(JVM)上执行的方法调用另一个在不同JVM上的对象的方法,仿佛它们是在同一个内存空间内操作。这种技术的核心是使Java对象能够跨越网络边界进行交互,从而实现真正的分布式计算。 一...
通过阅读和理解这些代码,开发者可以深入学习Java远程控制的实现细节。 总的来说,Java实现远程控制技术是一项涉及网络编程、多线程处理、图形处理以及安全性的综合任务。提供的源代码是学习和实践这一技术的宝贵...
6. **权限与认证**: 在远程操作中,确保安全非常重要。Java提供了SSL/TLS支持加密通信,同时可以通过SSH密钥对或者用户名/密码进行身份验证。 7. **异常处理**: 在处理远程文件操作时,必须考虑各种可能出现的异常...