简单远程访问
首先我们学习下简单的客户端远程访问服务端的例子.
这里用到了 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远程调试操作步骤
JAVA代码实现远程操作服务器文件,实现FTP,共享文件夹操作
在java中实现对access数据库的远程访问
Java JDK1.6 的Robot对象,该对象可以完成屏幕图像截取操作,控制鼠标,键盘,如此便可以轻而易举地实现远程服务器的控制。本文向大家介绍如何用Java Robot对象实现远程服务器的控制,并给出了相应的Java源代码。 ...
java 读取远程共享文件,一个操作简单的读取远程资源的控件。
其他IDE稍做修改就行,源码不依赖其他JAR包,所以容量很小,服务端主窗口为表格,可以打开预览窗口(屏幕墙),预览在线客户端画面,可以控制在线的电脑,另外包含功能:开机(客户端处理关机状态且打开远程唤醒的...
基于Java CS远程监控系统软件的设计与实现项目是一款基于Java语言开发的远程监控软件,主要应用Java Socket和Java AWT等技术,实现对远程设备的实时监控和控制。该系统可为企业、学校、政府等单位提供便捷和安全的...
主要实现的是登录服务器操作服务器的中的文件数据,支持读写的操作。主要使用的方法getProperties是设置配置的login(参数一是访问服务器的配置,参数二是设置读还是写)方法是读写连接服务器
本人自己写的Java远程监控,超简单,代码清晰易懂,使用UDP不可靠连接,cpu占用少,不过只有远程桌面监控,目前尚不能远程操作。。。纯Java代码无扩展jar包。 另免费附送基于JMF的远程摄像头监控,xp可用win7有些...
远程控制 桌面 java网页版源码,实现容易简单。源码简短,可作学习之用。
java通过代码登录远程linux服务器并执行linux命令源码以及jar包
用java实现了远程控制 功能齐全,比如服务器端屏幕会在客户端显示以及鼠标操作,键盘操作,各种快捷键都涵盖,性能优化,在局域网中速度很快
一个通过Java IO操作的,能够在远程机子上生成批量文件的源码
近年来,网络技术的不断发展,为...远程关机、远程重启计算机,方便了用户监视和操作被监控端机器。本系统从系统需求分析、概要设计、详细设计到具体的编码实现和后期的代码优化、功能测试都严格遵循了软件工程的思想。
用java编写的功能强大的远程控制软件,并且为开源软件。主要功能有, 生成服务器、屏幕监视,屏幕控制、上传文件、下载文件、远程命令、远程任务管理器、 发送警告、相互聊天、换皮肤、版本升级提醒等功能 有兴趣的...
NULL 博文链接:https://hb-yym-929.iteye.com/blog/1062642
用于远程操作Linux命令的ssh2包.可以实现远程登录Linux。
JAVA代码实现远程服务器的文件操作步骤及JAR包.zip
Java实现远程协助及远程屏幕分享功能。客户端可以查看服务端的屏幕,服务端可以远程控制客户端电脑像本地电服一样操作计算机。
用java写的远程监控软件,包括远程cmd命令,屏幕监控,摄像头操作,键盘钩子,远程注册表操作,以及文件的上传下载. 其中使用了一下第三方的开源jar包和dll文件,不是跨平台的,一些功能只能在windows上使用. 基本...