【摘 要】本文主要是软件监控设计,以C/S架构并以eclipse作为开发工具,采用Java开发语言编写程序,在Windows平台下实现的一种机房监控系统。过程中需要实现的有:获取被控端屏幕画面并且控制鼠标键盘的操作,通过点击控制端按钮可以进行被控制端的屏幕截图、锁定屏幕、强制关机以及服务器与被控端之间的通信等功能。
【关键词】监控系统;计算机;控制屏幕
中图分类号: TP308 文献标识码: A 文章编号: 2095-2457(2018)06-0125-002
0 前言
高校计算机房是学生学习知识培训现代化人才的良好教学场所,但有一些学生在上课时使用教学电脑玩游戏、看电影或者进行一些其他与学习无关的行为,给上课的老师及机房的管理人员带来很大的管理问题。因此,设计一种机房监控系统, 老师通过远程操作,可以获取被控端的桌面信息,实现有效的教学及机房管理势在必行。
1 系统方案的确定
本系统主要是应用远程监控技术对局域网内的电脑运行状态进行监控。通过获取被控端计算机实时的信息,局域网管理者能够在控制端查看任意一台被控计算机的使用情况,监控局域网内部计算机的桌面并且对桌面进行保存,实现对局域网内所操作计算机的管理。
系统的功能需求如下:
(1)实时监控:当控制端链接到被控制端时,能随时查看被控端的计算机画面,控制端可以实时监视被控制端的计算机,并且可以对其进行各种行为进行控制操作,能随时截取屏幕图片并自动保存,就像操作自己计算机一样简单地操作学生计算机。
(2)远程控制:控制端和被控制端连接后可在控制端的用户界面中单击按钮用以控制被控制端的计算机进行远程关机,能随时锁定并且解锁用户对计算机的操作。“锁定”计算机是使学生无法对计算机进行操作,使电脑短暂“失灵”。解锁就是恢复计算机的正常操作。
(3)为使用方便,要求程序界面友好,安装及维护简易可行。
(4)能同时支持多个被控端,及一台服务器能够管理多个被控端。
2 系统功能模块的设计
本系统用例主要分为两个部分,分别为被控端用户和控制端管理员
被控端用户:被控端用户只能被动的等待控制端传递消息过来,被控端用户所能做的仅仅是将被控端启动,后面的操作全部由控制端管理员进行。控制端人员可以对被控端实行截图、屏幕控制、锁屏、解锁、观察被控端界面、发送信息及关机等操作
控制端管理员输入被控制端IP后可以对被控端进行界面的观察、屏幕上各种事件的控制、被控端的屏幕截图并保存和控制被控端的锁屏、解锁功能。
2.1 系统架构设计
该系统是一种典型的C/S系统,其架构图如图2-1所示:
在该系统中,管理员通过一台服务器,对多个被控端进行控制。而这些控制的实现,都是通过向被控端发送消息请求来完成的,接下来介绍一下这些控制协议。
(1)锁定并且解锁。控制端向被控端发送锁屏指令,被控端将尝试进行锁屏,如果成功,将向服务器返回OK,否则返回NO;控制端向被控端发送锁屏指令,被控端将尝试进行锁屏,如果成功,将向服务器返回OK,否则返回NO。
(2)发送消息。控制端通过发送命令向被控端发送消息。消息的具体内容作为参数传递给被控端,被控端收到后返回OK给控制端,否则返回NO。
(3)屏幕截图。控制端直接通过截取软件截图来获取截图,不经过被控端。
被控端开始运行后,控制端输入被控端IP后,一边开始运行监控,一边接收管理员的管理操作。比如针对某个IP的电脑进行截图等。当用户选择终止程序时退出。被控端在运行后会不断监听来自控制端的消息,并对消息进行相应处理,然后返回结果到控制端。
2.2 用户界面的实现
控制端先创建一个输入ip界面,在此界面中输入ip并且验证成功后即跳转到控制端操作界面,输入被控端ip以用来连接控制端与被控制端,此界面的实现主要用了JFrame中的类文本框类JTextFiled,并且用了参数调用的方式传递ip给主程序,如果输入正确ip,即会自动跳转到控制端界面,如果输入错误ip系统会报链接错误。需要重新运行程序才能再次输入ip。
输入被控端IP地址输入后控制端界面如图2-2所示,本界面主要使用了JScrollpane类来承载桌面图片,另外还使用了JButton、JPanel等JAVA swing中的技術,在本界面中控制端管理员可以进行截图、锁屏、关机、输入文本和控制并查看被控端界面等操作。
被控端运行后没有任何界面出现,但与控制端链接后,通过控制端传递过来的命令进行反应。控制端传来锁屏命令会出现屏幕已锁定界面,该界面是置顶界面,只有通过控制端传来解锁命令才会取消该界面。当控制端输入文本并发送后,在被控制端这边便会显示文本发送界面,界面中会显示控制端所输入的内容,控制端刷新所输入内容后该界面自动刷新。被控端接收关机消息后会在60S后自动关机。
3 核心算法的实现
3.1 控制端与被控端之间的通信
public class ClientMain extends Thread{
public static void main(String[] args) {
Socket s;
s = new Socket(“127.0.0.1”,5921);
new UI(s);
}
}
public class ServerMain {
static ServerSocket ss;
public static void main(String[] args) {
ss = new ServerSocket(5921);
while (true)
{
Socket s = ss.accept();
}
}
}
3.2 屏幕截图
屏幕截图主要是通过截取当前在被控端获取的图片,通过BufferedImage和ImageIO.write来实现屏幕的截取并且保存。
public void screenshots(BufferedImage picture){}
ImageIO.write(imag, "JPEG",new File("d:/picture.jpg") );
3.3 鎖屏
锁屏主要是用Swing编写一种JFrme并置顶且不能强行关闭,只能通过控制端发送解锁信息来关闭锁屏界面。
JFrame f=new JFrame("");
if(obj != null && obj instanceof Boolean && obj!=a)
{
a=(Boolean)obj;
f.setAlwaysOnTop(true);
f.setUndecorated(true);
f.setLayout(null);
f.setBounds(0, 0, 2000, 2000);
f.setVisible(a);
}
3.4 获取并且控制被控端屏幕
将鼠标及键盘时间存入流中发送给被控端,在被控端中建立时间相应,进行对应时间操作。
out = new ObjectOutputStream(socket.getOutputStream());
ObjectInputStream in = new ObjectInputStream(s.getInputStream());
private void handleEvent(InputEvent event) {
MouseEvent mevent = null; // 鼠标事件
MouseWheelEvent mwevent = null;// 鼠标滚动事件
KeyEvent kevent = null; // 键盘事件
int mousebuttonmask = -100; // 鼠标按键
4 总结
局域网监控系统是机房中不可或缺的一部分,一个简洁易用的局域网监控系统不仅可以减轻管理员的工作负担,还可以使用户对机房中电脑的使用效率有所提高。本次设计主要以软件形式实现了获取被控端屏幕画面并且控制鼠标键盘的操作,管理员通过点击控制端按钮可以对被控端电脑的控制,从而提高机房使用率,净化上网的环境,杜绝某些学生用户在机房内使用电脑做其他违规的事情。
【参考文献】
[1]万加福.网络监控系统原理与应用[M].机械工业出版社,2009.
[2]梁笃国.网络视频监控及应用[M].人民邮电出版社,2009.
[3]林巧民.Java程序设计教程[M].清华大学出版社,2008.
[4]Jeffrey Richer. Windows 核心编程[M].机械工业出版社,2008.
[5]夏王霞.批操作在计算机实验室管理中的应用 [J].科技世界,2016.
[6](美)阿诺德,Ken Arnold,等. Java程序设计语言[M].人民邮电出版社,2011.
[7]FLANAGAN. Java技术手册[M].中国电力出版社,2010.
[8]飞思科技产品研发中心. JAVA应用开发详解[M].电子工业出版社,2012.
[9]耿祥义,张跃平.JAVA实用教程[M].清华大学出版社,2008.
[10]清宏计算机工作室. JAVA编程技巧[M].机械工业出版社,2010.
[11]赛奎春.JAVA工程应用与项目实践[M].机械工业出版社,2009.
[12]FLANAGAN. Java技术手册[M].中国电力出版社,2011.
[13]Bruce Eckel. Thinking in Java[M]. Upper Saddle River, New Jersey, USA: Prentice Hall,2010.
[14]BruceEckel. Java编程思想[M].机械工业出版社,2008.