APP下载

计算机远程监控技术研究

2013-10-08杨玉龙王宇谷令心

中国科技信息 2013年19期
关键词:霍夫曼截屏服务端

杨玉龙 王宇 谷令心

西南科技大学, 四川 绵阳

背景

随着计算机网络的高速发展,教学,办公跟计算机网络越来越分不开。在享受着计算机网络在教学办公上带来的便捷快速的同时,又有许多弊端,需要有效的监控手段进行管理。于是开发了本系统来对教育环境下的局域网进行有效的监控,来实时地进行有效的监督。

1 系统简介

本系统主要是有客户端和服务端两个部分组成即C/S模式,客户端和服务端的通信采用基于TCP/IP协议的Socket进行通信。客户端根据服务端的需求实时地将客户端主机的计算机屏幕画面传送到服务端主机,并显示在主机服务端供监控者查看。其简要的功能图如下所示:

图1 系统主要功能

该系统主要使用于计算机实验室的局域网环境中,局域网环境的网络架构示意图如图二所示。客户端主要完成的是被监控主机的屏幕的截取,对屏幕前后变化进行提取,对图片进行压缩以及将其传送到服务端这些功能,服务端主要完成扫描在线主机,接受来自服务端的数据,对数据进行解压,在对应的位置进行结果的显示,对多个服务端进行轮巡这些功能。下面便对主要涉及到的功能进行说明。

图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年为压缩文本文件而建立的一种不等长度编码。它的基本原理是频繁使用的数据用较短的代码代替,而较少使用的数据则用较长的代码代替,这样可以使报文中的编码数减少到最小从而达到压缩的目的。在变长编码中,对出现的概率大的信源符号赋予短码字,而对于出现概率小的信源符号赋予长码字。如果码字长度严格按照所对应符号出现概率大小的逆序排列,则编码结果平均码字长度一定小于任何其他的排列方式。

霍夫曼树是一种非常基本的数据结构,简单地说霍夫曼树就是带权路径长度最小的二叉树,它通过将权值大的外节点调整到离根节点较近的位置来得到最小路径长度。霍夫曼树是霍夫曼编码的基础。利用霍夫曼树可以构造霍夫曼编码。

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款雪佛兰科鲁兹车安全气囊控制模块在线编程操作方法
摸清黑客套路防范木马侵入
天使多快乐