第四講3遠程屏幕監(jiān)控系統(tǒng)ppt課件_第1頁
第四講3遠程屏幕監(jiān)控系統(tǒng)ppt課件_第2頁
第四講3遠程屏幕監(jiān)控系統(tǒng)ppt課件_第3頁
第四講3遠程屏幕監(jiān)控系統(tǒng)ppt課件_第4頁
第四講3遠程屏幕監(jiān)控系統(tǒng)ppt課件_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、 第第7講講 遠程屏幕監(jiān)控系統(tǒng)遠程屏幕監(jiān)控系統(tǒng) 教學目標與要求教學目標與要求:了解遠程屏幕監(jiān)控的原理了解遠程屏幕監(jiān)控的原理了解圖像壓縮編碼、解碼的類及其實現(xiàn)了解圖像壓縮編碼、解碼的類及其實現(xiàn)教學重點、難點:教學重點、難點:1. 教學重點:教學重點:遠程屏幕監(jiān)控的原理遠程屏幕監(jiān)控的原理圖像壓縮編碼、解碼圖像壓縮編碼、解碼使用使用UDP協(xié)議發(fā)送數(shù)據(jù)包協(xié)議發(fā)送數(shù)據(jù)包發(fā)送發(fā)送/接受鼠標和鍵盤控制命令并執(zhí)行其操作指令接受鼠標和鍵盤控制命令并執(zhí)行其操作指令2.教學難點:教學難點:圖像壓縮編碼、解碼圖像壓縮編碼、解碼發(fā)送發(fā)送/接受鼠標和鍵盤控制命令并執(zhí)行其操作指令接受鼠標和鍵盤控制命令并執(zhí)行其操作指令提問提

2、問: 處于局域網(wǎng)內(nèi)的兩臺計算機,當一臺計算機出現(xiàn)故障,由于地理位置及時間緊迫等因素,不便于直接去操作該臺計算機,那么如何實現(xiàn)通過另一計算機對該臺計算機進行直接的操作呢? 7.1 遠程屏幕監(jiān)控的原理遠程屏幕監(jiān)控的原理 控制端客戶端程序輸入被控端服務器端程序的IP地址后,就可以抓取到被控端的屏幕圖像,還可以對被控端進行遠程操作。 7.2 系統(tǒng)結構設計系統(tǒng)結構設計 8.2.1 系統(tǒng)總體結構1. 遠程屏幕監(jiān)控系統(tǒng)是一個客戶機與服務器系統(tǒng),程序分為服務器端和客戶端兩部分。其總體結構如下圖所示:2. 服務器端程序功能:(1) 發(fā)送自己的屏幕圖像。(2) 接收客戶端傳來的控制命令,并執(zhí)行相應的操作。3. 服

3、務器端程序結構: ( 如圖8.2所示) 圖8.2 服務器端程序結構4. 客戶端程序功能:(1) 接收被控端服務器傳來的屏幕圖像。(2) 向被控端發(fā)送鼠標操作或鍵盤操作指令。5. 客戶端程序結構:(如圖8.3所示)7.2.2 常用類的介紹常用類的介紹1. 生成生成JPEG壓縮圖像編碼、解碼的類壓縮圖像編碼、解碼的類在在com.sun.image.codec.jpeg類包中,主要應用以類包中,主要應用以下幾個類:下幾個類:(1)JPEGCodec: 執(zhí)行執(zhí)行JPEG圖像編碼的類。圖像編碼的類。(2) JPEGEncodeParam: 生成生成JPEG數(shù)據(jù)流的壓縮編數(shù)據(jù)流的壓縮編碼類,并可對其實例化

4、后的對象設置壓縮的品質(zhì)系碼類,并可對其實例化后的對象設置壓縮的品質(zhì)系統(tǒng)。其品質(zhì)系統(tǒng)對壓縮后生成圖像的質(zhì)量有很大影統(tǒng)。其品質(zhì)系統(tǒng)對壓縮后生成圖像的質(zhì)量有很大影響,品質(zhì)系數(shù)越小,壓縮率越高,圖像質(zhì)量越差。響,品質(zhì)系數(shù)越小,壓縮率越高,圖像質(zhì)量越差。反之,品質(zhì)系數(shù)越大,壓縮率越低,圖像質(zhì)量越好。反之,品質(zhì)系數(shù)越大,壓縮率越低,圖像質(zhì)量越好。(3) JPEGDecodeParam: 對壓縮的對壓縮的JPEG數(shù)據(jù)流進行數(shù)據(jù)流進行解碼的類。解碼的類。2. 字節(jié)數(shù)組輸入流/輸出流(1) ByteArrayInputStream(字節(jié)數(shù)組輸入流):包含一個內(nèi)部緩沖區(qū),該緩沖區(qū)存儲從輸入流中讀取的字節(jié)。 Byt

5、eArrayInputStream(byte buf, int offset, int length) /創(chuàng)建 ByteArrayInputStream,運用 buf 作為其緩沖區(qū)數(shù)組。(2) ByteArrayOutputStream(字節(jié)數(shù)組輸出流):將輸出流中的數(shù)據(jù)被寫入一個字節(jié)數(shù)組。緩沖區(qū)會隨著數(shù)據(jù)的不斷寫入而自動增長??墒褂?toByteArray() 和 toString() 檢索數(shù)據(jù)。 ByteArrayOutputStream() /創(chuàng)建一個新的字節(jié)數(shù)組輸出流。 3. 關于Robot類控制鼠標和鍵盤事件的方法: robot.mousePress(int button); /被控

6、端觸發(fā)按下鼠標的動作事件 robot.mouseRelease(int button); /被控端觸發(fā)釋放鼠標的動作事件 robot.mouseMove(int x,int y); /被控端觸發(fā)移動鼠標的動作事件 robot.mouseWheel(int button); /被控端觸發(fā)滾輪鼠標的動作事件 robot.keyPress(int code); /被控端觸發(fā)按下鍵盤的動作事件 robot.keyRelease(int code); /被控端觸發(fā)釋放鍵盤的動作事件 其中, robot是Robot實例化的對象。7.3 服務器端程序詳細設計服務器端程序詳細設計 1. 類名:類名:Serve

7、rTest 類功能:線程類,發(fā)送自己的屏幕圖像,類功能:線程類,發(fā)送自己的屏幕圖像, 并接受和執(zhí)行并接受和執(zhí)行 控制命令控制命令 方法方法1:main() 功能:主函數(shù),建立窗口并安排界面布局,調(diào)用功能:主函數(shù),建立窗口并安排界面布局,調(diào)用線程線程 方法方法2:ServerTest() 功能:構造方法,建立功能:構造方法,建立UDP數(shù)據(jù)報對象數(shù)據(jù)報對象 方法方法3:sendScreen() 功能:按功能:按UDP協(xié)議發(fā)送壓縮的屏幕圖像數(shù)據(jù)包協(xié)議發(fā)送壓縮的屏幕圖像數(shù)據(jù)包 方法方法4:run() 功能:接受和執(zhí)行控制命令功能:接受和執(zhí)行控制命令3.發(fā)送屏幕圖像方法發(fā)送屏幕圖像方法sendScree

8、n()(1) 工作流程: (2) 代碼實現(xiàn): try BufferedImage image=robot.createScreenCapture(new Rectangle(toolkit.getScreenSize(); image=image.getSubimage(0,0,800,600); /返回由指定矩形區(qū)域定義的子圖像。 ByteArrayOutputStream output=new ByteArrayOutputStream(); /創(chuàng)建字節(jié)數(shù)組輸出流 /將圖像數(shù)據(jù)壓縮為JPEG碼的圖像數(shù)據(jù) JPEGEncodeParam param=JPEGCodec.getDefaultJ

9、PEGEncodeParam(image); param.setQuality(0.3f,false); /設置壓縮率/將JPEG碼的圖像數(shù)據(jù)轉(zhuǎn)到輸出流 JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(output,param); encoder.encode(image); encoder.getOutputStream().close(); /關閉當前與編碼器關聯(lián)的流 DatagramPacket packet= new DatagramPacket(output.toByteArray(),output.size(),addres

10、s); /將圖像數(shù)據(jù)打包 this.socket.send(packet); /通過數(shù)據(jù)報套接字發(fā)送出去System.out.println(+i+n); catch (Exception e) e.printStackTrace();4. 接受和執(zhí)行控制命令的方法接受和執(zhí)行控制命令的方法run()(1) 工作流程:(2) run()在讀取數(shù)據(jù)包指令內(nèi)容時,按客戶端發(fā)出來的 數(shù)據(jù)的結構順序還原指令:當判斷出是REFRESH指令時,抓取自己的屏幕圖像發(fā)送給控制端。當判斷出是鍵盤指令時,其數(shù)據(jù)的前20位數(shù)據(jù)是指令類型,第2030位數(shù)據(jù)是按鍵相對應的Unicode碼,第3040位數(shù)據(jù)是按鍵值,第40

11、50位數(shù)據(jù)是左、右鍵的位置。當判斷出是鼠標指令時,其數(shù)據(jù)的前20位數(shù)據(jù)是指令類型,第2030位數(shù)據(jù)是鼠標X坐標值,第3040位數(shù)據(jù)是鼠標Y坐標值,第4050位數(shù)據(jù)是左、右鍵的鍵值。 7.4 客戶端程序詳細設計客戶端程序詳細設計 1. 類名:類名:ClientTest 類功能簡介:發(fā)送控制指令,接收被控端傳來的屏幕類功能簡介:發(fā)送控制指令,接收被控端傳來的屏幕圖圖 像進行解壓,還原并顯示圖像像進行解壓,還原并顯示圖像 方法方法1:main() 功能:主函數(shù),建立輸入被控端功能:主函數(shù),建立輸入被控端IP地址的窗口及顯示地址的窗口及顯示被控被控 端屏幕圖像窗口,并設置鍵盤監(jiān)聽端屏幕圖像窗口,并設置

12、鍵盤監(jiān)聽 方法方法2:ClientTest() 功能:構造方法,設置傳送功能:構造方法,設置傳送UDP數(shù)據(jù)報指令的參數(shù),數(shù)據(jù)報指令的參數(shù),定義向定義向 被控端發(fā)出截取屏幕圖像指令的線程,定義監(jiān)聽被控端發(fā)出截取屏幕圖像指令的線程,定義監(jiān)聽鼠標事件鼠標事件 方法方法3:run() 功能:接收被控端傳來的屏幕圖像數(shù)據(jù)功能:接收被控端傳來的屏幕圖像數(shù)據(jù)方法4:getScreen()功能:將接收到的屏幕圖像數(shù)據(jù)進行解壓,還原成圖像方法5:sendKey()功能:向被控端發(fā)送控制鍵盤事件的指令方法6:sendMouse()功能:向被控端發(fā)送控制鼠標事件的指令方法7:paint()功能:繪制被控端的屏幕圖像

13、(2)方法調(diào)用關系:2. 主函數(shù)main() 在主函數(shù)中創(chuàng)建了一個輸入被控端IP地址信息的窗體, 如圖8.7 所示: 窗口中安排了一個“確定按鈕,單擊該按鈕后,輸入IP地址信息窗體將被隱藏,這時,彈出顯示被控端屏幕圖像的窗口。并通過線程ClientTest()向被控端發(fā)出截取屏幕圖像的指令,從而能在窗口中顯示被控端的屏幕圖像。圖8.7 輸入被控端IP地址信息的窗體3. 構造方法ClientTest() 向被控端發(fā)送REFRESH字符串,其實就是向被控端發(fā)出截取屏幕圖像的指令。 DatagramPacket packetsign=new DatagramPacket(“REFRESH”.getB

14、ytes(),20); Socket.send(packetsign); 然后調(diào)用線程run()方法來接收被控端傳來的屏幕圖像數(shù)據(jù)。4. 線程run()方法 線程run()方法用于接收被控端傳來的屏幕圖像數(shù)據(jù)。5. 還原屏幕圖像方法getScreen() getScreen()方法用于對接收到的屏幕圖像數(shù)據(jù)進行解壓,還原成圖像。 JPEGImageDecoder decoder=JPEGCodec.createJPEGDecoder(input); BufferedImage image=decoder.decodeAsBufferedImage(); this.image=image; th

15、is.setPreferredSize(new Dimension(image.getWidth(),image.getHeight();最后通過panit()方法將image圖像顯示出來。6. 發(fā)送鍵盤指令方法sendKey() 發(fā)送鍵盤指令的方法為: void sendKey(int type,int code,char c,int location)其中定義了四個參數(shù): int type為指令類型,判斷是按下鍵還是釋放鍵; int code 為按鍵相對應的Unicode碼; char c 為按鍵值; int location為按鍵所在左鍵、右鍵位置。在sendKey()方法中,構造了一個

16、用于發(fā)送指令數(shù)據(jù)的 字節(jié)數(shù)組bytes:byte bytes=new byte50;該數(shù)組有50個數(shù)組元素,前20位元素存放指令類型,第2030位元素存放按鍵相對應的Unicode碼,第3040位元素存放按鍵值,第4050位元素存放左、右鍵位置,如圖8.8所示:7. 發(fā)送控制鼠標事件的方法sendMouse() 發(fā)送控制鼠標事件的方法為:void sendMouse(int type,int x,int y,int button)其中定義了四個參數(shù): int type為指令類型,判斷是單擊鼠標、釋放鼠標、移動鼠標還是滾動鼠標滾輪; int x、y為鼠標指針坐標位置; int button為單擊鼠標左鍵或右鍵的鍵值。 在sendMouse()方法中構造的字節(jié)數(shù)組bytes,其數(shù)組有50個數(shù)組元素,前20位元素存放指令類型,第2030位元素存放鼠標指針x坐標值,第3040位元素存放鼠標指針y坐標值,第4050位元素存放左、右鍵的鍵值,如圖8.9所示:教學總結:教學總結: 1. 一般將數(shù)據(jù)打包,都必須指定目的主機的IP地址和端口, 在本例中,我們看到 packet= new DatagramPacket(outp

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論