远程控制计算机的原理
1. 方式
l C/S模式
C/S模式类似于PCANYWHERE,需要一个Server和一个client,分别安装在不同的计算上,client计算机控制server所在的计算机上。一般在局域网内使用,使用TCP协议,如果在internet网上使用可能需要代理服务器或一个server,但其受防火墙的影响比较大。
l Web模式
是一个B/S模式,实际上是C/S模式的变种,只不过client是浏览器,因此client不需要安装特定的软件,但server端还是需要安装软件的。任何计算想要访问该server的时候,就去指定的web页面得到指定的连接。他至少需要一个WEB服务器,且为了保障通讯的安全和跨防火墙和局域网,最好还是要另外的通讯service。
2. 原理
上面两种模式在原理上是相似的,需要一个网络通讯的server和client,只不过两种模式的client可能不同(一种是开发的application,另一种是浏览器,实际上通过浏览器上的插件来完成通讯),但其发送数据,取得控制的机理是一样的。
这里还是分server和client来解释。
l server端
server端需要运行一个基于TCP/IP(一般都选择TCP比较可靠)的软件,在某个端口监听(自己定义的对client端著名的端口)。它是一个多线程的程序,当listen到client一个请求的时候就得到产生一个新的线程去处理client的请求。
由于是远程控制程序,client的请求无非是查看屏幕、传递文件、操作server的程序等。下面一个个解释:
查看屏幕:实际上在client连接之后,server就需要将其屏幕发送给client端,发送的是经过处理的图片(这里很有讲究的是图片的格式和压缩算法),但一个重要的问题是如何取得屏幕的变化是一个重要的性能问题,如果你不停的发送信息,那将无疑是最蠢的办法。有许多办法,一个是检查得到的图片信息的变化量,还有一种办法是从硬件的显卡的刷新来得到(这种方法像微软/WEBEX等已经实现,不过这种方法对性能很有帮助)。得到的图像需要根据client的分辨率来调整。
操作server的程序:当client在得到的屏幕上操作时,实际上他在图片上操作,可以得到它的鼠标事件/键盘事件和坐标,将这些信息发送给server端。Server将得到的信息分析出来,根据不同的信息解析出不同的系统消息(WM_),然后通过mouse_event和key_event函数来还原出系统消息,从而得到client的操作。
传递文件:知道上面两个过程,传递文件就是小意思了,只是一个文件copy的过程了。
l client端
client需要知道server的IP和端口(如果在WEB上,那么这些信息从WEB 服务器上得到,其端口一般使用80端口),然后client发送连接请求,如果server在线,那么就连接上了。
连接上之后首先取得server的屏幕,实际上是图片文件,然后根据client的分辨率将其显示在client端,以后情况有两种情况:
1. Server主动变化将信息发送过来(只有在server端也是有人操作的时候才出现这种情况),client只需要更新屏幕就可以了。
2. Client发送变化的信息,这个时候是不需要改变屏幕的,但随后会从server有更新的内容过来。
Client操做server计算机时,首先得到在当前图片上的位置,然后转换为server上的坐标,且将鼠标时间和键盘事件都记录下来,一道发送到server端。
3. 实现
以上说的是基本的过程,而且主要是在 window 平台上,使用 socket 能够实现其中的通讯部分。当然具体的实现代码还是有一些工作量。