第27卷第3期 计算机应用与软件
Vol 127No .32010年3月 Computer App licati ons and Soft w are Mar .2010
刘 佳 郑 华 刘 洋 史振江
(石家庄铁路职业技术学院信息工程系 河北石家庄050041)
收稿日期:2008-10-08。河北省教育厅自然科学项目(Z2006442)。刘佳,助教,主研领域:人工智能。
摘 要 针对目前网络远程控制软件存在的数据传输问题,提出一种在W indows 系统平台下运行的基于TCP 和UDP 混合协议的 远程控制软件的设计思路与开发技术。使用柯达公司的I m gEdit 控件对截屏后的图像文件进行了压缩,便于数据的传输;系统使用W ins ock 网络编程技术,基于C /S 模式,Client 端调用W ins ock 发送相关控制命令,Server 端主要运用W ins ock 和AP I 函数实现远程屏幕抓取、控制操作和数据传输等功能。实验结果表明,该方法能方便、快捷地实现远程计算机的控制以及数据的传输,从而为远程智能控制的发展提供了发展方向。
关键词 远程控制 W ins ock 屏幕抓取 T CP 协议 UDP 协议
D ES I GN AND I M PL
E M ENTAT I O N O
F RE MO TE CO NTROL S O FT W ARE
BASED O N M I XED TCP AND UD P PRO TOCOL S
L iu J ia Zheng Hua L iu Yang Shi Zhenjiang
(D epart m ent of Infor m ation Engineering,Shijiazhuang Institute of Rail w ay Technology,Shijiazhuang 050041,hebei,China )
Abstract A i m ing at the data trans m issi on issue of current net w ork re mote contr ol s oft w are,this paper p r ovides a ne w designing idea and devel opment technol ogy of re mote contr ol s oft w are based on m ixed TCP and UDP p r ot ocols and running on the p latf or m ofW indo ws operating syste m.The use of the I m gEdit contr ol of Kodak can comp ress the screenshot i m age file for trans m itting the data quickly and correctly .The s oft w are is based on C /S model usingW in
s ock net w ork p r ogra mm ing technol ogy .The Client 2end sends the relevant contr ol command t o Serv 2er 2end by invokingW ins ock contr ol and the Server 2end i m p le ments the operati on of remote screen cap ture,contr ol and data trans m issi on,etc .by runningW is ock and AP I functi on .Experi m ental results show that this method p resented by the paper can quickly and easily contr ol the re 2mote computers and trans m it the data successfully,s o it is good f or the devel opment of the distance intelligent contr ol .Keywords Re mote contr ol W ins ock Screen cap ture TCP p r ot ocol UDP p r ot ocol
0 引 言
近年来,随着PC 技术的广泛应用和网络的不断发展,网络技术已经成为计算机领域最为热门的发展方向[1],尤其是网络远程控制技术已经广泛地应用于网络自动化管理、实时监控[2]、计算机教学,以及各种自动化工业控制[3]等方面。远程控制可以实现一对一模式,也可以实现一对多模式。控制端与被控制端之间的通信协议可以采用TCP 也可以采用UDP,目前的远程控制软件都是基于单纯的TCP 或者UDP 协议的。文献石灰窑炉
[1]采用MFC 和S DK 混合编程,设计了基于T CP 协议的远程控
制软件。文献[4-8]也分别给出了基于TCP 协议的远程控制方法,以上这些方法可以实现控制端与被控
端之间的图形数据的传输,但连接到控制端的被控制的数量越多,给网络带来的额外负担就越重,从而导致数据交换的延迟,降低整个网络的数据交换能力,因此比较适合一对一模式。文献[9]提出了基于
UDP 协议的远程抓屏控制方法,但是为了保证数据的可靠传输
使用滑动窗口控制算法增加了软件的复杂性。针对以上存在的问题,本文使用VB 语言开发了基于TCP 和UDP 混合协议的远程控制软件。
1 远程网络通信的实现
远程控制软件实际上是一种客户机/服务器程序,服务器程
序安装在被控制的计算机端,客户端安装在控制端,客户端发送命令,服务器端接受命令并执行相应的操作。因此解决网络客户端与服务器端的通信就成了远程控制实现的基础。W ins ock 通信是网络通信过程中应用广泛、使用灵活的一种方式,本文使用W ins ock 控件实现远程计算机的连接,并通过T CP 或者UDP 协议进行数据交换。这两种协议之间的重要区别在于它们的连接状态不同:T CP 协议是基于连接的协议,提供可靠的流服务;而UDP 协议是一种无连接协议,提供数据报文服务,使用UDP 协议系统资源开销小,传输速度快,但可靠性不如T CP 协议[6]。
远程控制中对被控端实现的关机、重启、注销、计算机I P 地址获取、计算机键盘锁定以及自动截屏等功能需要被控端及时反应,且发送这些命令的消息占用的字节较少,在传输距离不算太长,信号衰减较弱的情况下,基于大量的被控端本文考虑使用UDP 协议来进行控制端与被控端之间的通信,尤其可以利用
128
实验室分析天平计算机应用与软件2010年
W ins ock 在UDP 协议下的广播功能来实现对全体被控端的远程
关机、重启等操作。抓屏后形成的图像文件数据所占的字节数是远远大于那些控制消息的,因此需要将图像数据分块进行多次传输。为了能在控制端看到完整的所截图像,必须采用TCP 协议,因为UDP 协议是一种无连接协议,不能保证数据的可靠传输。图1描述了主控端与被控端之间的控制和通信机制
。
图1 客户端控制多台服务器
图1中控制端是基于UDP 协议向各个被控端发送各种命令消息的,包括:关机、重启、注销、计算机I P 地址获取、计算机键盘锁定以及自动截取屏幕等命令。
图2描述了控制端与被控端之间建立TCP 通道以及数据的传输过程:在两端的程序中首先分别设置两个W ins ock 控件,命名为svrudp s ock 、svrtcp s ock 、clitudp s ock 、clittcp s ock,其中cli 2tudp s
ock 与svrudp s ock 将在控制端与被控端之间建立基于UDP 协议的对话,svrtcp s ock 与clittcp s ock 将在两端之间建立基于TCP 协议的对话。开始时控制端的clitudp s ock 向被控端发送截取屏幕的命令消息,同时clittcp s ock 开始侦听,svrudp s ock 接收到消息以后,由svrtcp s ock 向控制端申请建立T CP 连接的请求,clittcp s ock 接收到请求以后,开始建立连接,完成以后向对方发送确认消息,对方的svrtcp s ock 收到确认消息以后,开始调用AP I 函数捕捉自己的屏幕,生成的图像经过压缩、分块由svrtcp 2s ock 发送到控制端,clittcp s ock 分批接受数据。由于数据的传输是基于TCP 协议的,所以能够保证控制端得到清晰完整的图像
。
图2 描述了控制端与被控端之间建立TCP 通道以及数据的传输过程
基于UDP 和TCP 混合协议进行传输数据,不仅能够实现控
制端与被控端之间命令的快速传输,还能保证传送数据的正确性和完整性,具有广泛的应用性和重要的实用价值。
2 网络控制技术的实现
要使被控端能够接收控制端的命令,去完成不同的控制功能,被控端程序中必须设计有完成各种控制功能的子程序,下面将对常用的功能模块进行介绍。
2.1 W i n sock 控件的初始化
使用UDP 协议,在clitudp s ock 与svrudp s ock 之间进行数据
的发送,在控制端需对clitudp s ock 完成以下三步设置:
(1)设置Re moteHost 属性为广播形式;
(2)设置Re motePort 为被控端svrudp s ock 的LocalPort 属性cd4543
的值;
(3)申请B ind 方法。代码如下:
clitudp s ock .Pr ot ocol =sckUDPPr ot ocol //采用UDP 协议
clitudp s ock .Re moteHost =″xxx .xxx .xxx .255″
//I P 地址的最后8位设置为255,表明要进行的是广播消息
爆震弹//模式,其它位的值可根据具体情况设置。
clitudp s ock .Re motePort =8000//远程访问的端口为8000
clitudp s ock .B ind 8001
//绑定到8001端口在程序初始化时还需设置控制端clittcp s ock 的侦听端口以便建立TCP 连接:
clittcp s ock .LocalPort =9000
同样也需要在被控端进行设置:
svrudp s ock .Pr ot ocol =sckUDPPr ot ocol
svrudp s ock .Re moteHost =控制端机器的名称或I P svrudp s ock .Re motePort =8001//访问远程控制端的端口
svrudp s ock .B ind 8000
svrtcp s ock .Re moteHost =控制端机器的名称或I P svrtcp s ock .Re motePort =9000
2.2 远程关机功能实现
被控端与控制端通信的过程中,控制端通过clitudp s ock 发送各种命令消息,被控端通过svrudp s ock 的Data A rrival (数据接收)事件进行判断命令的种类,从而执行相应的操作。如果是关机或者重启等命令,被控端执行相应的程序既可。控制端发送命令:
clitudp s ock .SendData ″SHUT DOWN ″//发送关机命令clitudp s ock .SendData ″REBOOT ″//发送重启命令clitudp s ock .SendData ″LOG OFF ″
//发送注销命令
被控端关机、重启以及注销等命令的执行需要AP I 函数
Exit W indowsEx 来实现:
Exit W indowsEx flag,dwreversed
参数flag =E WX_LOG OFF 或者0
//注销flag =E WX_SHUT DOWN 或者1//关机flag =E WX_REBOOT 或者2//重启flag =E WX_F ORCE 或者4
//强制操作
在被控端执行以上这些操作,首先需要获得对系统的操作权限,部分代码如下:
Private Sub EnablePrivilege ()
//获得系统操作权限
D i m hPr oc A s Long D i m hToken A s Long D i m mLU I D A s LU I D
D i m mPriv A s T OK
E N_PR I V I L EGES D i m mNe wPriv
A s T OKE N_PR I V I L EGES
hPr oc =Get CurrentPr ocess ()
OpenPr ocessToken hPr oc,T OKE N _ADJUST_PR I V I L EGES +T OKEN _QUE 2RY,hToken
LookupPrivilege Value ″″,″SeShutdownPrivilege ″,mLU I D mPriv .PrivilegeCount =1
mPriv .Privileges (0).A ttributes =SE_PR I V I L EGE_ENABLED mPriv .Privileges (0).pLuid =mLU I D
AdjustTokenPrivileges hToken,False,mPriv,4+(123mPriv .Privilege 2Count ),mNe wPriv,4+(123mNe wPriv .PrivilegeCount )End Sub
第3期 刘佳等:基于TCP和UDP混合协议的远程控制软件的设计与实现129
以上代码中用到的AP I函数需要提前声明。
2.3 远程网络监控的实现
如果被控端svrudp s ock接收到的是截取屏幕的命令,同样需要调用相应的AP I函数来实现自动截屏,
然后将截取的图像拷贝到柯达公司的I m gedit控件中,进行压缩,转变为JPG格式的图像并保存。文献[10]对屏幕图像的采集、压缩以及传输进行了研究,提出了相应的算法,但这种算法比较复杂,鉴于此本文采用柯达公司的I m gedit控件,该控件能将截取的屏幕图像压缩至40k左右,使用svrtcp s ock控件可以一次传输出去。但由于接收方的clittcp s ock控件一般是4K至8K调用一次Data A rrival 子程,故被控端将分块进行发送,接收方确认后再发下一块。
(1)被控端屏幕的截取
对于屏幕图像的截取,可以调用W indows AP I函数keybd_ event来模拟键盘上的PrintScreen键。截图的部分源代码如下: Public Sub s_cap()//捕捉屏幕图像Call keybd_event(vbKeySnap shot,1,0,0)//模拟按键操作DoEvents
I f I m gEdit1.Is Cli pboardData Available Then//当剪贴板上有数据时I m gEdit1.Clear D is p lay//清除数据End I f
I m gEdit1.D is p lay B lank I m age Screen.W idth/Screen.T wi p sPerPixel X, Screen.Height/Screen.T wi p sPerPixelY,,,6
I m gEdit1.Cli pboardPaste//粘贴图像I m gEdit1.Burn I nAnnotati ons0,2
I m gEdit1.Save A s″e:\test.JPG″,wiFileTypeJPG,6,6,256
//把图像压缩并保存在本地″e:\test.JPG″Cli pboard.Clear
Call Filesent(″e:\test.j pg″)//调用图像传输函数End Sub
(2)屏幕图像的传输
对于图像的传输需要设置每次传输数据的大小,即缓冲区:
Public Const i M ax=4096//设置为4K 此外设置公共变量iPos,用于记录发送的字节数:
Public iPos A s Long
图像文件传输的源代码如下:
Public Sub Filesent(File Na me A s String)
D i m Freeid A s I nteger//空闲的文件号D i m LenFile A s Long//文件的长度D i m byt D ata()A s Byte//存放数据的数组Freeid=FreeFile//获得空闲的文件号Open File Na me For B inary A s#Freeid打开文件DoEvents
LenFile=LOF(Freeid)//获得文件长度I f LenFile<=i M ax Then
//如果要发送的文件小于数据块大小,直接发送Re D i m byt D ata(1To LenFile)
//根据文件长度重新定义数组大小Get#Freeid,,byt D ata//把文件读入到数组里Cl ose#Freeid//关闭文件svrtcp s ock.SendData byt D ata//发送数据DoEvents
Exit Sub//发送完毕退出End I f
//文件大于数据块大小,进行分块发送Do Until((LenFile2i M ax)<=iPos)
//循环的发送数据块,直到剩下的数据没有i M ax那么大Re D i m byt D ata(1To i M ax)
Get#Freeid,iPos+1,byt D ata
svrtcp s ock.SendData byt D ata
DoEvents
iPos=iPos+i M ax
//移动iPos,使它指向下来要读的数据Loop
Re D i m byt D ata(1To LenFile2iPos)
//发送剩下的不够一个数据块的数据Get#Freeid,iPos+1,byt D ata
svrtcp s ock.SendData byt D ata
DoEvents
Cl ose#Freeid
iPos=0//重新清零,便于下次为截取屏幕End Sub
(3)控制端接收图像并显示
控制端将通过clittcp s ock控件的Data A rrival事件接受发送过来的图片数据并通过I m gEdit进行显示,源代码如下:
D i m flag A s Boolean//定义公共变量
Private Sub clittcp s ock_Data A rrival(By Val bytesT otal A s Long)
识字闪卡//接受对方发送过来的图片文件
D i m byt D ata()A s Byte:D i m LenFile A s Long
D i m f:D i m filena me A s String
filena me=App.Path&″\cap ture.j pg″
f=FreeFile:Open filena me For B inary A s#f
Re D i m byt D ata(1To bytesTotal)
无毒的clittcp s ock.Get D ata byt D ata,vbA rray+vbByte,bytesTotal
//说明接收的是字节数组
I f flag=False Then
//flag=false表示是第一次打开文件Put#f,1,byt D ata:flag=True
Else
LenFile=LOF(f):Put#f,LenFile+1,byt D ata
End I f
Cl ose#f
I m gEdit1.I m age=filena me//显示接收的图片
I m gEdit1.D is p lay:I m gEdit1.Burn I nAnnotati ons0,2
End Sub
以上代码实现了图像数据的传输,同样语音数据也可以按照上述方法进行发送和传输。
2.4 软件的运行设置
为了保证远程控制的正确实现,需要将被控端程序设置为开机自动启动,因此需要运行将被控端的可执行文件加到注册表:LOCAL2MACH I N E\S OFT WARE\M icr os oft\W in2 dows\Current V ersi on\Run下,这样在W indows下次启动时就会自动运行。为防止用户破坏、卸载程序,本文将被控端程序注册为系统服务进程,并在W indows的任务管理器中隐藏,一般用户无法察看该进程:
RegisterServicePr ocess Get CurrentPr ocessI d,1
/
/注册当前进程为系统服务3 系统运行与测试
基于以上提出的方法,本文在W indows XP平台下使用VB
130
计算机应用与软件2010年
程序设计语言分别实现了基于T CP 协议的远程控制程序、基于
UDP 协议的以及基于TCP 和UDP 混合协议的远程控制协议。
基于TCP 和UDP 混合协议的远程控制软件已经在河北某高校机房投入运行并取得良好的效果,软件包括控制端和被控端,控制端的主界面如图3所示,界面中部显示的图片为远程所抓的图像
。
图3 基于UDP 和TCP 混合协议的远程程序的控制
图4、图5、图6分别为基于TCP 协议、UDP
协议以及二者混合协议的远程控制所抓的图像,从图中可以明显地看到基于
UDP 协议所抓的图像不完整、且不清晰,数据在传输过程出现
了错误,而基于T CP 和二者混合协议所抓的图像是比较清晰和完整的,但是经实验证明基于单纯TCP 协议所实现的程序,如果被控端的数量较多,容易造成网络通信负担以及资源的耗费,通信速度不太理想。
图4 基于TCP 协
议的程序远程抓图
图5 基于UDP 协
议的程序远程抓图
图6 基于混合协议的程序远程抓图
4 结束语
本文实现的基于T CP 和UDP 混合协议的远程控制软件,不仅能够方便、快捷地实现对远程机器的控制,大大减轻了工作人员的负担,而且是在占用网络带宽较少、系统资源最小的条件下,将被控端的数据稳定、安全、有效传送到控制端,具有广泛的应用价值,为远程智能控制中数据的传输提供了发展方向。
参 考 文 献
[1]朱东辉.基于wins ock 通信的远程屏幕抓取方法与实现[J ].计算
机应用研究,2005(8):204-206.
[2]曾志,尹建伟.基于B /S 架构W eb 远程控制的研究及实现[J ].计
算机应用与软件,2005,22(11):71-73.[3]黄琦伟.分布式系统在工业远程监控中的研究与实现[J ].计算机
应用与软件,2004,21(7):71-73.
[4]张莉,张德栋.网络远程控制软件的设计与实现[J ].山东科技大
学学报:自然科学版,2004,23(2):58-60.
[5]彭晨,张鸣,岳东.远程控制中自动截屏功能的实现方法[J ].计算
机应用研究,2007(2):266-268.
[6]张量,詹国华,袁贞明.计算机远程控制的实现与应用[J ].计算机
应用,2002,22(4):62-63.
[7]常永昌,冯新喜,王芳.一种远程控制软件的设计与实现[J ].计算
机应用,2003,23(3):127-129.
[8]汤光明,王娜.基于TCP /I P 的多媒体通信实现[J ].计算机应用研
究,2001,18(4):95-97.
[9]杨耐生,张仁杰,王斌.通过计算机网络实现远程实验[J ].微型电
脑应用,2003,19(3):55-57.
[10]肖道举,刘洪峰,陈晓苏.面向远端屏幕监控的一种图像压缩传输
方法[J ].计算机工程与设计,2005,26(12):3356-3358.
(上接第99页)
5 结束语
关联规则的更新是数据挖掘技术中的一个重要内容,能否有效地挖掘出动态事务数据集中的频繁项目集是衡量一个算法好坏的关键因素。本文在对增量式和减量式关联规则更新技术深入研究基础上[6-8],提出了相应的算法。通过以上分析和实验性能比较可以看出,在算法的运行时耗上具有很明显的优势,提高了更新关联规则集的效率。数据集越大,剪枝效果越加明显,越能显现出本算法的优越性。由于本算法经常要判断一个项目集是否存在于另一个项目集中,可以在此问题上作一定的
研究(如可以利用项集中项目有序的特点等),以进一步提高本
算法的效率。
参考文献
[1]J ia wei Han,M icheline Kamber .数据挖掘概念与技术[M ].北京:机
械工业出版社,2001.
[2]David W ,Cheung J,Ngvt,et al.Maintenance of D iscovered A ss ociati on
Rules in Large Database:An I ncre mental Updating Technique [C ]//Pr oc 12th I nt.Conf.On Data Engineering,NE W O rleans,Louisiana,I EEE Computer Society,1996:106-114.
[3]David W ,Cheung J,Leesd,et al .Ageneral I ncremental Technique for
Maintaining D iscovered A ss ociati onRules [C ]//Pr oceedings of the Fifth I nternati onal Conference on Database Syste m s for Advanced Ap 2p licati ons,Melbourne,Australia,1997:185-194.
[4]闫炜,崔杜武,付长龙.基于幂集的关联规则挖掘算法研究[J ].计
算机工程与应用,2004(1):192-193.
[5]李忠哗,任春龙,何丕廉.一种基于FP 2树的最大频繁模式增量更
新挖掘算法[J ].计算机应用与软件,2007,24(5):47-49.
[6]陈劲松,施小英.一种关联规则增量更新算法[J ].计算机工程,
2002,28(7):106-107.
[7]冯玉才,冯剑琳.关联规则的增量式更新算法[J ].软件学报,
1998,9(4):301-306.
[8]朱辉生,马常霞.关联规则挖掘的两种改进算法[J ].计算机应用
与软件,2006,23(8):117-119.