?

計算機遠程監控技術研究

2013-10-08 03:04楊玉龍王宇谷令心
中國科技信息 2013年19期
關鍵詞:霍夫曼截屏服務端

楊玉龍 王宇 谷令心

西南科技大學, 四川 綿陽

背景

隨著計算機網絡的高速發展,教學,辦公跟計算機網絡越來越分不開。在享受著計算機網絡在教學辦公上帶來的便捷快速的同時,又有許多弊端,需要有效的監控手段進行管理。于是開發了本系統來對教育環境下的局域網進行有效的監控,來實時地進行有效的監督。

1 系統簡介

本系統主要是有客戶端和服務端兩個部分組成即C/S模式,客戶端和服務端的通信采用基于TCP/IP協議的Socket進行通信??蛻舳烁鶕斩说男枨髮崟r地將客戶端主機的計算機屏幕畫面傳送到服務端主機,并顯示在主機服務端供監控者查看。其簡要的功能圖如下所示:

圖1 系統主要功能

該系統主要使用于計算機實驗室的局域網環境中,局域網環境的網絡架構示意圖如圖二所示??蛻舳酥饕瓿傻氖潜槐O控主機的屏幕的截取,對屏幕前后變化進行提取,對圖片進行壓縮以及將其傳送到服務端這些功能,服務端主要完成掃描在線主機,接受來自服務端的數據,對數據進行解壓,在對應的位置進行結果的顯示,對多個服務端進行輪巡這些功能。下面便對主要涉及到的功能進行說明。

圖2 局域網網絡架構示意圖

2 截屏方法

常用的屏幕圖像采集方法有四種:創建屏幕DC方式、Directx方式、采用hook截獲所有有關的windows消息方式以及mirror driver方式[1]。其中Directx方式和mirror driver方式都需要依賴第三方軟件的支持,為了本系統的簡潔和方便這里不做推薦使用,而采用hook截獲所有有關的windows消息的方式,是用hook截取所有有關windows消息,然后判斷各個消息是否對屏幕矩形區域是否有影響,再把這些矩形合成一個區域壓縮傳輸,這種方式在速度上比較快,但是這種方法對CPU的要求太高了基本占到整個CPU消耗的80%以上,也就是說,基本上干不了其他的事情了,所以這種方法不推薦使用,下面對創建屏幕DC做詳細介紹。

2.1 創建屏幕DC方式

首先獲得當前屏幕的指針,并使用GetDC函數獲得屏幕的設備上下文,然后通過GetClientRect函數獲取屏幕的大小,為屏幕的設備上下文創建一個內存設備的上下文,該設備上下文也叫做兼容的設備上下文。接著根據屏幕的設備上下文通過CreateCompatibleBitmap函數創建一個兼容位圖,屏幕的設備上下文的內容以圖片的格式放在內存中,并將該位圖通過SelectObject函數加載到當前設備上下文中。最后通過BitBlt函數將屏幕的設備上下文中的內容復制到內存設備上下文中,然后通過GetDIBits函數就可以獲取位圖的數據了。

2.2 差異截屏

在實際的屏幕截取過程中,每次截取屏幕的數據量都是特別大的,一個屏幕分辨率為1366*768的屏幕截屏下來的數據存儲成24位BITMAP文件格式大小就有3M,如果每次都傳輸這么大的數據量,很顯然是不能接受的。所以在截屏上要前后屏幕不同的部分提取出來,然后傳送給接收端,這樣數據的傳輸量就小了很多。關于差異截屏主要有兩種方式:隔行掃描和分塊比較。

2.2.1 隔行掃描

隔行掃描也就是將前后兩張截屏的結果,進行圖像數據隔行比較的一個過程,這樣在比較過程中我們會得出兩幅圖片的不同的最小的矩形區域,其大致過程是:我們在掃描的過程中,發現第一個不同的像素的地方我們就設置一個2*2大小的矩形框表示不同區域,矩形框的頂點坐標分別為像素的坐標加減1,在進行掃描的過程中,發現不同的像素點,便擴大該矩形框,直到掃描完,得到不同的矩形區域,接下來我們將這些矩形區域發送即可得到相應的變化部分。

2.2.2 分塊比較

分塊比較便是將已知分辨率的屏幕圖像分成若干個小塊,比如說8*8或者16*16的圖像塊,然后將前后兩張圖像按這樣的大小進行分塊,然后將對應的分塊進行比較,得到不同的分塊的過程,這樣我們傳送前后不同的分塊便可實時地進行圖像更新。

3 數據壓縮編碼

常見的壓縮編碼方式主要分為4大類:像素編碼、預測編碼、變換編碼、其他編碼方法。像素編碼是指編碼時對每個像素單獨處理而不考慮像素之間的關聯性。在像素編碼的幾種方法有:脈沖編碼(Pulse Code Modulation),熵編碼(Entropy Coding),行程編碼(Run Length Coding),位平面編碼(Bit Plane Coding)。本系統中主要運用的就是熵編碼中的霍夫曼編碼(Huffman)。預測編碼將充分考慮圖像相鄰像素之間的相關性。他將基于相鄰像素之間的相關性和冗余性,對新的信息進行編碼。變換編碼是指將給定的圖像變換到另一個數據域上,使得大量的信息能用較少的數據來表示,從而達到壓縮的目的。變換編碼有很多,如離散傅里葉變換(Discrete Fourier Transform),離散余弦變換(Discrete Cosine Transform),離散哈達曼變換(Discrete Hadamard Transform),本系統中便會用到離散余弦變換。除了上面的3類編碼方法以為的所有編碼方法統稱為其他編碼方法[2]。

3.1 霍夫曼編碼

霍夫曼編碼是一種常用的壓縮編碼方式,它是由Huffman于1952年為壓縮文本文件而建立的一種不等長度編碼。它的基本原理是頻繁使用的數據用較短的代碼代替,而較少使用的數據則用較長的代碼代替,這樣可以使報文中的編碼數減少到最小從而達到壓縮的目的。在變長編碼中,對出現的概率大的信源符號賦予短碼字,而對于出現概率小的信源符號賦予長碼字。如果碼字長度嚴格按照所對應符號出現概率大小的逆序排列,則編碼結果平均碼字長度一定小于任何其他的排列方式。

霍夫曼樹是一種非?;镜臄祿Y構,簡單地說霍夫曼樹就是帶權路徑長度最小的二叉樹,它通過將權值大的外節點調整到離根節點較近的位置來得到最小路徑長度?;舴蚵鼧涫腔舴蚵幋a的基礎。利用霍夫曼樹可以構造霍夫曼編碼。

3 離散余弦變換

離散余弦變換是圖像正交變換的一種,他實際上是一種空間域的低通濾波器。在JPEG的數據壓縮過程中,首先要進行一次離散余弦變換。離散余弦變換的作用是把圖片里面的點和點間的規律呈現出來以方便壓縮。

一維DCT變換定義如下:

其中F(u)為第u個余弦變換系數,u為廣義頻率變量,u=1,2,...,N-1;f(x)是時域中N點序列,x=0,1,2,...,N-1。

將一維DCT變換進行擴展,則二維DCT變換定義如下:

其中f(x,y)為空間域中的二維向量,x,y=0,1,2,3,...,N-1,F(u,v)為變換系數矩陣,u,v=1,2,3,.....,N-1。

4 在線主機掃描

在整個系統中有個很關鍵的地方是客戶端和服務端何時進行通信。在實際解決的過程中,我們把優先權給服務端,就是說服務端主動去發現局域網中有哪些客戶端在線,是否命令客戶端將他的主機屏幕情況發送給監控者以便查看。要實現這一點,就要對局域網內的主機進行掃描,將掃描的結果記錄在服務端的客戶端列表里面。掃描的方法有多種,我們可以基于ARP進行客戶端IP地址掃描,也可以根據客戶端進程編號,進行客戶端編號掃描。其結果都是一樣的,因為其通信的對象其實就是IP地址。掃描得到的編號也需要對應得到IP地址。

5 輪巡

輪巡就是對多個客戶端就行輪流查看。這主要考慮到,服務端能同時顯示客戶端屏幕信息的位置有限,我們對服務端顯示部分分塊,如果分得太多那么顯示出的客戶端圖像就太小,這不便于觀看,經過測試在1000*600左右大小的服務端窗口界面的情況下,6個分塊,是最理想的效果。6個分塊要顯示幾十個客戶端的屏幕信息,這看似好像不可能,但是運用輪巡的話便很好實現,我們將客戶端的屏幕信息打上客戶端編號,通過輪流顯示的方式顯示在觀察區域這就很好地解決了這一問題。通過多線程輪巡,不但可以減輕服務端的運行負荷,也能做到實時地觀察。

6 總結

本文闡述了,計算機實驗室實時監控系統的主要功能以及實現過程,對其關鍵的技術部分進行了全面的介紹。該系統能夠很好地滿足在局域網環境下的計算機屏幕監控,特別適用于高校的日常教學監督,以及小型企業組長對員工的電腦作業進行有效的監督。系統相應的功能還需完善,需要添加更多的管理功能,以后會慢慢完善。

[1]張潔瓊,章義來.遠程屏幕差異截屏的研究與實現.福建電腦,2011.11

[2]左飛,萬晉森, 劉航. 數字圖像處理開發入門與編程實踐 電子工業出版社 ,2008.3.1

[3]徐向陽,曹幫琴.差異截圖法實現屏幕圖像快速傳輸.南陽師范學院院報,2007.9

[4]康松林,費洪曉,施榮華.網絡應用軟件監控系統監控信息傳輸的設計與實現.中南大學學報,2006.4

[5]劉銳寧,李偉明,梁水.Visual C ++ 編程寶典.人民郵電出版社 ,2011.1

猜你喜歡
霍夫曼截屏服務端
做長圖何必反復截屏?滾動截屏
抽象表現主義藝術先驅——漢斯·霍夫曼
葉佑天作品選
新時期《移動Web服務端開發》課程教學改革的研究
2012款奔馳R300車修改最高車速限制
2014款雪佛蘭科魯茲車安全氣囊控制模塊在線編程操作方法
摸清黑客套路防范木馬侵入
天使多快樂
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合