【摘 要】本文主要是軟件監(jiān)控設(shè)計(jì),以C/S架構(gòu)并以eclipse作為開發(fā)工具,采用Java開發(fā)語言編寫程序,在Windows平臺(tái)下實(shí)現(xiàn)的一種機(jī)房監(jiān)控系統(tǒng)。過程中需要實(shí)現(xiàn)的有:獲取被控端屏幕畫面并且控制鼠標(biāo)鍵盤的操作,通過點(diǎn)擊控制端按鈕可以進(jìn)行被控制端的屏幕截圖、鎖定屏幕、強(qiáng)制關(guān)機(jī)以及服務(wù)器與被控端之間的通信等功能。
【關(guān)鍵詞】監(jiān)控系統(tǒng);計(jì)算機(jī);控制屏幕
中圖分類號(hào): TP308 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 2095-2457(2018)06-0125-002
0 前言
高校計(jì)算機(jī)房是學(xué)生學(xué)習(xí)知識(shí)培訓(xùn)現(xiàn)代化人才的良好教學(xué)場(chǎng)所,但有一些學(xué)生在上課時(shí)使用教學(xué)電腦玩游戲、看電影或者進(jìn)行一些其他與學(xué)習(xí)無關(guān)的行為,給上課的老師及機(jī)房的管理人員帶來很大的管理問題。因此,設(shè)計(jì)一種機(jī)房監(jiān)控系統(tǒng), 老師通過遠(yuǎn)程操作,可以獲取被控端的桌面信息,實(shí)現(xiàn)有效的教學(xué)及機(jī)房管理勢(shì)在必行。
1 系統(tǒng)方案的確定
本系統(tǒng)主要是應(yīng)用遠(yuǎn)程監(jiān)控技術(shù)對(duì)局域網(wǎng)內(nèi)的電腦運(yùn)行狀態(tài)進(jìn)行監(jiān)控。通過獲取被控端計(jì)算機(jī)實(shí)時(shí)的信息,局域網(wǎng)管理者能夠在控制端查看任意一臺(tái)被控計(jì)算機(jī)的使用情況,監(jiān)控局域網(wǎng)內(nèi)部計(jì)算機(jī)的桌面并且對(duì)桌面進(jìn)行保存,實(shí)現(xiàn)對(duì)局域網(wǎng)內(nèi)所操作計(jì)算機(jī)的管理。
系統(tǒng)的功能需求如下:
(1)實(shí)時(shí)監(jiān)控:當(dāng)控制端鏈接到被控制端時(shí),能隨時(shí)查看被控端的計(jì)算機(jī)畫面,控制端可以實(shí)時(shí)監(jiān)視被控制端的計(jì)算機(jī),并且可以對(duì)其進(jìn)行各種行為進(jìn)行控制操作,能隨時(shí)截取屏幕圖片并自動(dòng)保存,就像操作自己計(jì)算機(jī)一樣簡(jiǎn)單地操作學(xué)生計(jì)算機(jī)。
(2)遠(yuǎn)程控制:控制端和被控制端連接后可在控制端的用戶界面中單擊按鈕用以控制被控制端的計(jì)算機(jī)進(jìn)行遠(yuǎn)程關(guān)機(jī),能隨時(shí)鎖定并且解鎖用戶對(duì)計(jì)算機(jī)的操作。“鎖定”計(jì)算機(jī)是使學(xué)生無法對(duì)計(jì)算機(jī)進(jìn)行操作,使電腦短暫“失靈”。解鎖就是恢復(fù)計(jì)算機(jī)的正常操作。
(3)為使用方便,要求程序界面友好,安裝及維護(hù)簡(jiǎn)易可行。
(4)能同時(shí)支持多個(gè)被控端,及一臺(tái)服務(wù)器能夠管理多個(gè)被控端。
2 系統(tǒng)功能模塊的設(shè)計(jì)
本系統(tǒng)用例主要分為兩個(gè)部分,分別為被控端用戶和控制端管理員
被控端用戶:被控端用戶只能被動(dòng)的等待控制端傳遞消息過來,被控端用戶所能做的僅僅是將被控端啟動(dòng),后面的操作全部由控制端管理員進(jìn)行。控制端人員可以對(duì)被控端實(shí)行截圖、屏幕控制、鎖屏、解鎖、觀察被控端界面、發(fā)送信息及關(guān)機(jī)等操作
控制端管理員輸入被控制端IP后可以對(duì)被控端進(jìn)行界面的觀察、屏幕上各種事件的控制、被控端的屏幕截圖并保存和控制被控端的鎖屏、解鎖功能。
2.1 系統(tǒng)架構(gòu)設(shè)計(jì)
該系統(tǒng)是一種典型的C/S系統(tǒng),其架構(gòu)圖如圖2-1所示:
在該系統(tǒng)中,管理員通過一臺(tái)服務(wù)器,對(duì)多個(gè)被控端進(jìn)行控制。而這些控制的實(shí)現(xiàn),都是通過向被控端發(fā)送消息請(qǐng)求來完成的,接下來介紹一下這些控制協(xié)議。
(1)鎖定并且解鎖。控制端向被控端發(fā)送鎖屏指令,被控端將嘗試進(jìn)行鎖屏,如果成功,將向服務(wù)器返回OK,否則返回NO;控制端向被控端發(fā)送鎖屏指令,被控端將嘗試進(jìn)行鎖屏,如果成功,將向服務(wù)器返回OK,否則返回NO。
(2)發(fā)送消息。控制端通過發(fā)送命令向被控端發(fā)送消息。消息的具體內(nèi)容作為參數(shù)傳遞給被控端,被控端收到后返回OK給控制端,否則返回NO。
(3)屏幕截圖。控制端直接通過截取軟件截圖來獲取截圖,不經(jīng)過被控端。
被控端開始運(yùn)行后,控制端輸入被控端IP后,一邊開始運(yùn)行監(jiān)控,一邊接收管理員的管理操作。比如針對(duì)某個(gè)IP的電腦進(jìn)行截圖等。當(dāng)用戶選擇終止程序時(shí)退出。被控端在運(yùn)行后會(huì)不斷監(jiān)聽來自控制端的消息,并對(duì)消息進(jìn)行相應(yīng)處理,然后返回結(jié)果到控制端。
2.2 用戶界面的實(shí)現(xiàn)
控制端先創(chuàng)建一個(gè)輸入ip界面,在此界面中輸入ip并且驗(yàn)證成功后即跳轉(zhuǎn)到控制端操作界面,輸入被控端ip以用來連接控制端與被控制端,此界面的實(shí)現(xiàn)主要用了JFrame中的類文本框類JTextFiled,并且用了參數(shù)調(diào)用的方式傳遞ip給主程序,如果輸入正確ip,即會(huì)自動(dòng)跳轉(zhuǎn)到控制端界面,如果輸入錯(cuò)誤ip系統(tǒng)會(huì)報(bào)鏈接錯(cuò)誤。需要重新運(yùn)行程序才能再次輸入ip。
輸入被控端IP地址輸入后控制端界面如圖2-2所示,本界面主要使用了JScrollpane類來承載桌面圖片,另外還使用了JButton、JPanel等JAVA swing中的技術(shù),在本界面中控制端管理員可以進(jìn)行截圖、鎖屏、關(guān)機(jī)、輸入文本和控制并查看被控端界面等操作。
被控端運(yùn)行后沒有任何界面出現(xiàn),但與控制端鏈接后,通過控制端傳遞過來的命令進(jìn)行反應(yīng)。控制端傳來鎖屏命令會(huì)出現(xiàn)屏幕已鎖定界面,該界面是置頂界面,只有通過控制端傳來解鎖命令才會(huì)取消該界面。當(dāng)控制端輸入文本并發(fā)送后,在被控制端這邊便會(huì)顯示文本發(fā)送界面,界面中會(huì)顯示控制端所輸入的內(nèi)容,控制端刷新所輸入內(nèi)容后該界面自動(dòng)刷新。被控端接收關(guān)機(jī)消息后會(huì)在60S后自動(dòng)關(guān)機(jī)。
3 核心算法的實(shí)現(xiàn)
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 屏幕截圖
屏幕截圖主要是通過截取當(dāng)前在被控端獲取的圖片,通過BufferedImage和ImageIO.write來實(shí)現(xiàn)屏幕的截取并且保存。
public void screenshots(BufferedImage picture){}
ImageIO.write(imag, "JPEG",new File("d:/picture.jpg") );
3.3 鎖屏
鎖屏主要是用Swing編寫一種JFrme并置頂且不能強(qiáng)行關(guān)閉,只能通過控制端發(fā)送解鎖信息來關(guān)閉鎖屏界面。
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 獲取并且控制被控端屏幕
將鼠標(biāo)及鍵盤時(shí)間存入流中發(fā)送給被控端,在被控端中建立時(shí)間相應(yīng),進(jìn)行對(duì)應(yīng)時(shí)間操作。
out = new ObjectOutputStream(socket.getOutputStream());
ObjectInputStream in = new ObjectInputStream(s.getInputStream());
private void handleEvent(InputEvent event) {
MouseEvent mevent = null; // 鼠標(biāo)事件
MouseWheelEvent mwevent = null;// 鼠標(biāo)滾動(dòng)事件
KeyEvent kevent = null; // 鍵盤事件
int mousebuttonmask = -100; // 鼠標(biāo)按鍵
4 總結(jié)
局域網(wǎng)監(jiān)控系統(tǒng)是機(jī)房中不可或缺的一部分,一個(gè)簡(jiǎn)潔易用的局域網(wǎng)監(jiān)控系統(tǒng)不僅可以減輕管理員的工作負(fù)擔(dān),還可以使用戶對(duì)機(jī)房中電腦的使用效率有所提高。本次設(shè)計(jì)主要以軟件形式實(shí)現(xiàn)了獲取被控端屏幕畫面并且控制鼠標(biāo)鍵盤的操作,管理員通過點(diǎn)擊控制端按鈕可以對(duì)被控端電腦的控制,從而提高機(jī)房使用率,凈化上網(wǎng)的環(huán)境,杜絕某些學(xué)生用戶在機(jī)房?jī)?nèi)使用電腦做其他違規(guī)的事情。
【參考文獻(xiàn)】
[1]萬加福.網(wǎng)絡(luò)監(jiān)控系統(tǒng)原理與應(yīng)用[M].機(jī)械工業(yè)出版社,2009.
[2]梁篤國(guó).網(wǎng)絡(luò)視頻監(jiān)控及應(yīng)用[M].人民郵電出版社,2009.
[3]林巧民.Java程序設(shè)計(jì)教程[M].清華大學(xué)出版社,2008.
[4]Jeffrey Richer. Windows 核心編程[M].機(jī)械工業(yè)出版社,2008.
[5]夏王霞.批操作在計(jì)算機(jī)實(shí)驗(yàn)室管理中的應(yīng)用 [J].科技世界,2016.
[6](美)阿諾德,Ken Arnold,等. Java程序設(shè)計(jì)語言[M].人民郵電出版社,2011.
[7]FLANAGAN. Java技術(shù)手冊(cè)[M].中國(guó)電力出版社,2010.
[8]飛思科技產(chǎn)品研發(fā)中心. JAVA應(yīng)用開發(fā)詳解[M].電子工業(yè)出版社,2012.
[9]耿祥義,張躍平.JAVA實(shí)用教程[M].清華大學(xué)出版社,2008.
[10]清宏計(jì)算機(jī)工作室. JAVA編程技巧[M].機(jī)械工業(yè)出版社,2010.
[11]賽奎春.JAVA工程應(yīng)用與項(xiàng)目實(shí)踐[M].機(jī)械工業(yè)出版社,2009.
[12]FLANAGAN. Java技術(shù)手冊(cè)[M].中國(guó)電力出版社,2011.
[13]Bruce Eckel. Thinking in Java[M]. Upper Saddle River, New Jersey, USA: Prentice Hall,2010.
[14]BruceEckel. Java編程思想[M].機(jī)械工業(yè)出版社,2008.