一般的远程监控软件都是用c或者c++等语言开发的,而使用java如何来实现相同的功能呢。
首先我们先介绍一下一个简单的远程监控程序的实现原理。
功能一,远程屏幕监视
(1) 必须要有监控端与被监控端,而且程序保持启动。
(2) 被监控端获取本机的屏幕截屏发图给监控端。
(3) 监控端在本地窗口中显示被监控端发送过来的图像。
(4) (2)(3)步骤重复执行,这时在监控端即可实时监视到被监控端的桌面操作了。
功能二,远程控制
(1) 必须要有监控端与被监控端,而且程序保持启动。
(2) 在监控端监视窗体上执行鼠标点击事件。
(3) 记录步骤 (2)中的鼠标点击的坐标,及键值发送到被监控端。
(4) 被监控接受鼠标坐标,及键值,然后再本地屏幕上模拟同样的点击动作。
OK,现在看下具体的java与语言是如何实现上述功能的。
使用java语言要实现截屏的功能就要依靠java类库中的一个有趣的类
java.awt.Robot类【俗称Java机器人】了
功能一,远程屏幕监视
//『客户端』抓取屏幕快照GuiCamera.java
BufferedImage screenshot =
(new Robot()).createScreenCapture(
new Rectangle(0, 0, (int) size.getWidth(),
(int) size.getHeight()));
//『客户端』发送快照 SendThread.java
image=gc.snapShot();
//保存为临时文件
File file=new File("temp.png");
FileOutputStream fileout=new FileOutputStream(file);
ImageIO.write(image,"png",fileout);
fileout.close();
//读取图像
FileInputStream fileIn=new FileInputStream(file);
int len=(int)file.length();
//建立字节数组
byte[] buf=new byte[len];
fileIn.read(buf,0,len);
//发送
out.write(buf,0,len);
out.flush();
//间隔500毫秒
Thread.sleep(500);
//『监控端』接受图像,Snap.java
public void run() {
while (flag) {
byte[] buf = new byte[102400];
try {
imgStream = new BufferedInputStream(
socket.getInputStream());
imgStream.read(buf);
ImageIcon icon = new ImageIcon(Toolkit.
getDefaultToolkit().
createImage(buf));
lab.setIcon(icon);
File file = new File("1.jpg");
FileOutputStream fileOut = new FileOutputStream(file);
fileOut.write(buf);
fileOut.close();
repaint();
setVisible(true);
System.out.println("读取图象成功!");
} catch (Exception ex) {
ex.printStackTrace();
flag = false;
}
}
System.out.println("服务器停止");
}
}
功能二,远程控制
『监控端』记录鼠标操作Snap.java
//内部类,主要功能监听鼠标事件。记录坐标。
class keyAdapet extends KeyAdapter
{ //键盘监听适配器
public void keyTyped(KeyEvent e) {
if (e.getKeyChar() == 27) { //按ESC键
Object[] options = {
"确定",
"取消"};
int n = JOptionPane.showOptionDialog(null,
"是否退出程序?",
"远程监控系统",
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE,
null, //don't use a custom Icon
options, //the titles of buttons
options[0]);
if (0 == n) {
System.exit(0);
}
}
}
}
public void mouseClicked(MouseEvent e) {
System.out.println("双击了鼠标");
int x = e.getX();
int y = e.getY();
if (tempSocket != null) {
new CommandMsg("2", tempSocket, x, y).start();
}
}
public void mousePressed(MouseEvent e) {
if (e.BUTTON1 == MouseEvent.BUTTON1) {
System.out.println("你按了鼠标左键~~~~~~~~~~~");
int x = e.getX();
int y = e.getY();
if (tempSocket != null) {
new CommandMsg("3", tempSocket, x, y).start();
}
}
}
......
}
『监控端』发送坐标Snap.java
public void run() {
out.println(eventType + "," + x + "," + y);
out.flush();
}
『客户端』获取鼠标坐标后,在本机相同坐标位置模拟一个鼠标点击操作 Coop.java
public void run() {
while (flag) {
try {
String s = in.readLine();
decode(s);
switch (method) {
//这里的man实际也是Robot的一个实例。
case 1:
man.mouseMove(x, y);
break;
case 2:
man.mouseMove(x, y);
man.mousePress(InputEvent.BUTTON1_MASK);
man.mouseRelease(InputEvent.BUTTON1_MASK);
break;
case 3:
man.mousePress(InputEvent.BUTTON1_MASK);
break;
case 4:
man.mouseRelease(InputEvent.BUTTON1_MASK);
break;
default:
break;
}
} catch (IOException exe) {
ThreadInfo.CoopIsLive=false;
flag=false;
exe.printStackTrace();
}
}
}
代码的部分就介绍到这里,由于java语言的一些限制,本实例仅作为演示。有感兴趣的朋友可以下载附件中的程序做进一步参考。
分享到:
相关推荐
利用java实现一个简单的远程监控程序.pdf
利用java实现一个简单的远程监控程序资料.pdf
利用java实现远程控制,可以完成屏幕图像截取操作,控制鼠标,键盘
基于Java的CS远程监控系统软件是一种用于监控和管理远程计算机的应用程序,旨在帮助管理员实时监控和远程管理大量计算机设备。以下是系统的主要功能和实现描述: 系统功能: 远程监控:管理员可以实时查看远程...
它的控制的过程是先在被监控端电脑上执行客户端程序,像一个普通的客户一样向主控 端电脑中的服务器端程序发出信号,建立一个特殊的远程服务,然后通过这个远程服务,接 收主控端发送过来的远程控制命令,并对命令...
本系统是利用类java.awt.robot中的屏幕截取和鼠标、键盘自动控制功能,然后加上网络传输功能来完成来完成截屏和远程控制的。 随着互联网技术的高速发展,人们生活的各方面都受到互联网技术的影响。现在人们可以通过...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
自己动手写的一个小程序,利用Socket实现远程DOS控制,客户端发送指令,服务端接收到后自动执行,并将执行结果返回客户端; C#;Socket;Dos;远程控制。
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
BlazeDS是一个基于服务器的Java 远程控制(remoting)和Web消息传递(messaging)技术,它能够使得后端的Java应用程序和运行在浏览器上的Adobe Flex应用程序相互通信。这篇文章中,我讲述一种方法(也许不是最好的)使得...
Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...
Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...
Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...
Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮...