杜興華
摘要:遠(yuǎn)程控制系統(tǒng)JPCAnyWhere采用主控端/被控端的設(shè)計(jì)結(jié)構(gòu),通過對(duì)系統(tǒng)事件隊(duì)列進(jìn)行Socket通信的方法傳遞事件。通過Java JDK中的Robot對(duì)象,該對(duì)象可以完成屏幕圖像截取,控制鼠標(biāo),鍵盤,如此便可以輕而易舉地實(shí)現(xiàn)遠(yuǎn)程計(jì)算機(jī)的控制。遠(yuǎn)程控制系統(tǒng)JPCAnyWhere通過在主控端輸入被控端的IP地址進(jìn)行連接識(shí)別,在被控端通過Robot截取桌面圖像,通過Socket通信傳給主控端,同時(shí)應(yīng)用Java多線程的控制方法傳送、接受圖像和各種事件。本文對(duì)遠(yuǎn)程控制系統(tǒng)JPCAnyWhere進(jìn)行了介紹,詳細(xì)分析了其設(shè)計(jì)原理,主控端和被控端的設(shè)計(jì)流程,并測(cè)試了JPCAnyWhere的各項(xiàng)功能。
關(guān)鍵詞:Java;遠(yuǎn)程控制;Robot類;Socket;多線程
一、計(jì)算機(jī)遠(yuǎn)程控制相關(guān)技術(shù)綜述
遠(yuǎn)程控制技術(shù)基于Java的遠(yuǎn)程控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),電腦中的遠(yuǎn)程控制技術(shù)始于DOS時(shí)代,當(dāng)時(shí)由于技術(shù)上沒有什么大的變化,網(wǎng)絡(luò)不發(fā)達(dá),市場(chǎng)沒有更高的要求,所以遠(yuǎn)程控制技術(shù)沒有引起更多人的注意。但是,隨著網(wǎng)絡(luò)的高度發(fā)展,電腦的管理及技術(shù)支持的需要,遠(yuǎn)程操作及控制技術(shù)越來越引起人們的關(guān)注。遠(yuǎn)程控制一般支持下面的這些網(wǎng)絡(luò)方式:LAN、WAN、撥號(hào)方式、互聯(lián)網(wǎng)方式。此外,有的遠(yuǎn)程控制軟件還支持通過串口、并口、紅外端口來對(duì)遠(yuǎn)程機(jī)進(jìn)行控制。傳統(tǒng)的遠(yuǎn)程控制軟件一般使用NETBEUI、NETBIOS、IPX/SPX、TCP/IP等協(xié)議來實(shí)現(xiàn)遠(yuǎn)程控制,隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,對(duì)遠(yuǎn)程控制軟件提供通過Web頁面以Java技術(shù)來控制遠(yuǎn)程電腦的需求不斷增多,這樣可以實(shí)現(xiàn)不同操作系統(tǒng)下的遠(yuǎn)程控制。
二、系統(tǒng)分析
對(duì)于具體功能,用戶要求實(shí)現(xiàn)對(duì)被控端進(jìn)行各種鼠標(biāo)和鍵盤操作,包括獲取目標(biāo)電腦屏幕圖像、遠(yuǎn)程關(guān)機(jī)、打開應(yīng)用程序等。主控端能夠顯示被控端桌面,并且把基于被控端圖像上的鍵盤,鼠標(biāo)事件通過Socket通信傳給被控端;被控端能夠響應(yīng)主控端的鼠標(biāo)鍵盤事件。UDP協(xié)議的全稱是用戶數(shù)據(jù)報(bào),在網(wǎng)絡(luò)中它與TCP協(xié)議一樣用于處理數(shù)據(jù)包。在OSI模型中,在第四層——傳輸層,處于IP協(xié)議的上一層。 UDP有不提供數(shù)據(jù)報(bào)分組、組裝和不能對(duì)數(shù)據(jù)包的排序的缺點(diǎn),也就是說,當(dāng)報(bào)文發(fā)送之后,是無法得知其是否安全完整到達(dá)的。
用戶數(shù)據(jù)報(bào)協(xié)議(UDP)是 OSI 參考模型中一種無連接的傳輸層協(xié)議,提供面向事務(wù)的簡(jiǎn)單不可靠信息傳送服務(wù)。 UDP 協(xié)議基本上是 IP 協(xié)議與上層協(xié)議的接口。 UDP 協(xié)議適用端口分別運(yùn)行在同一臺(tái)設(shè)備上的多個(gè)應(yīng)用程序。
協(xié)議結(jié)構(gòu):
Source Port—16位。源端口是可選字段。當(dāng)使用時(shí),它表示發(fā)送程序的端口,同時(shí)它還被認(rèn)為是沒有其它信息的情況下需要被尋址的答復(fù)端口。如果不使用,設(shè)置值為0。
Destination Port—16位。目標(biāo)端口在特殊因特網(wǎng)目標(biāo)地址的情況下具有意義。
Length—16位。該用戶數(shù)據(jù)報(bào)的八位長(zhǎng)度,包括協(xié)議頭和數(shù)據(jù)。長(zhǎng)度最小值為8。
Checksum—16位。IP 協(xié)議頭、UDP 協(xié)議頭和數(shù)據(jù)位,最后用0填補(bǔ)的信息假協(xié)議頭總和。如果必要的話,可以由兩個(gè)八位復(fù)合而成。
Data—包含上層數(shù)據(jù)信息。
UDP協(xié)議使用IP層提供的服務(wù)把從應(yīng)用層得到的數(shù)據(jù)從一臺(tái)主機(jī)的某個(gè)應(yīng)用程序傳給網(wǎng)絡(luò)上另一臺(tái)主機(jī)上的某一個(gè)應(yīng)用程序。
在Java語言中,線程有如下特點(diǎn):
§ 在一個(gè)程序中而言,主線程的執(zhí)行位置就是main。而其他線程執(zhí)行的位置,程序員是可以自定義的。值得注意的是對(duì)Applet也是一樣。
§ 每個(gè)線程執(zhí)行其代碼的方式都是一次順序執(zhí)行的。
§ 一個(gè)線程執(zhí)行其代碼是與其他線程獨(dú)立開來的。如果諸線程之間又相互協(xié)作的話,就必須采用一定的交互機(jī)制。
§ 前面已經(jīng)說過,線程是共享地址空間的,如果控制不當(dāng),這里很有可能出現(xiàn)死鎖。
三、系統(tǒng)總體設(shè)計(jì)
系統(tǒng)的實(shí)現(xiàn)原理如下:
(1)被控端通過Robot截取桌面圖像通過socket通信傳給主控端。
(2)主控端顯示被控端桌面,并且把基于被控端圖像上的鍵盤,鼠標(biāo)事件通過socket通信傳給被控端。
(3)被控端響應(yīng)主控端的鼠標(biāo)鍵盤事件。
在系統(tǒng)設(shè)計(jì)過程中,將本著先進(jìn)性、實(shí)用性、開放性、適應(yīng)性、可擴(kuò)展性、便利性、可靠性、安全性、經(jīng)濟(jì)性等原則。
遠(yuǎn)程控制系統(tǒng)100%的自主開發(fā),不利用第三方組件,為系統(tǒng)的開放性、可擴(kuò)展性、可靠性提供有力保證。
于Java的遠(yuǎn)程控制系統(tǒng)JPCAnyWhere和其他遠(yuǎn)程控制系統(tǒng)一樣具有網(wǎng)絡(luò)計(jì)算的功能,他們的不同之處就在于:基于Java的遠(yuǎn)程控制系統(tǒng)JPCAnyWhere的設(shè)計(jì)重點(diǎn)是“與平臺(tái)無關(guān)”的特性,因此,我們的設(shè)計(jì)目標(biāo)就是盡可能兼容各類計(jì)算機(jī)硬件和各種操作系統(tǒng)。在計(jì)算機(jī)硬件系統(tǒng)方面有大型機(jī)、工作站和 PC、Mac 等,在操作系統(tǒng)方面有 Windows 系列、Unix 系列、Linux 系列以及 Sun(R)Solaries系列等系統(tǒng)。
四、系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)
主控端模塊的類及其作用,在確定軟件的包結(jié)構(gòu)后,需要進(jìn)一步確定軟件的類與接口。遠(yuǎn)程控制系統(tǒng)JPCAnyWhere中各部分相對(duì)獨(dú)立,對(duì)于公共定義的各環(huán)境變量和線程管理接口等子模塊,可通過直接引用包含有該子模塊的類或接口來實(shí)現(xiàn)。
根據(jù)本遠(yuǎn)程控制系統(tǒng)的實(shí)現(xiàn)方法。
五、結(jié)論
本課題參照現(xiàn)有的遠(yuǎn)程控制軟件,開發(fā)了一個(gè)基于Java的遠(yuǎn)程控制系統(tǒng)JPCAnyWhere。遠(yuǎn)程控制系統(tǒng)JPCAnyWhere在Eclipse3.2平臺(tái)上由Java語言開發(fā),其結(jié)構(gòu)采用主控端/被控端的設(shè)計(jì)結(jié)構(gòu),通過對(duì)系統(tǒng)事件隊(duì)列進(jìn)行Socket通信的方法傳遞事件。通過Java JDK中的Robot對(duì)象,該對(duì)象可以完成屏幕圖像截取操作,控制鼠標(biāo)、鍵盤,如此便可以輕而易舉地實(shí)現(xiàn)遠(yuǎn)程計(jì)算機(jī)的控制。
遠(yuǎn)程控制系統(tǒng)JPCAnyWhere通過在主控端輸入被控端的IP地址進(jìn)行連接識(shí)別,在被控端通過Robot截取桌面圖像,通過Socket通信傳給主控端,同時(shí)應(yīng)用Java多線程的控制方法傳送、接受圖像和各種事件。JPCAnyWhere的設(shè)計(jì)與實(shí)現(xiàn)中存在一些問題。例如在被控端主機(jī)上播放視頻時(shí),在主控端傳輸過來的圖像無法顯示視頻信息;JPCAnyWhere支持的功能不是很豐富等。這些問題的出現(xiàn),使JPCAnyWhere的應(yīng)用范圍受到限制。在下一階段的研究中,對(duì)課題的改進(jìn)主要包括兩個(gè)方面,分別是對(duì)JPCAnyWhere功能的擴(kuò)充,以及解決在實(shí)現(xiàn)過程中遇到的一些關(guān)鍵問題,包括視頻圖像的截取和傳輸問題等等。