RealVNC源码学习笔记 一
1、VNC简介
VNC是一款优秀的远程控制软件,其英文全拼为 Virtual NetworkComputer。VNC 是在基于 UNIX 和 Linux 操作系统的免费的开源软件。 目前VNC不仅仅支持UNIX、Linux系统,其是一款跨平台的开源软件,处理支持UNIX、Linux系统外,还支持WINDOWS、MAC、Solaris、HP-UX等操作系统。
目前比较著名的VNC软件有RealVNC 和TightVNC。RealVNC的官方网址为http://www.realvnc.com,TightVNC的官方网址为http://www.tightvnc.com。
VNC运用RFB协议,RFB为remoteframe buffer 远程帧缓存的简写,是一个远程图形用户的简单协议,因为它工作在帧缓存级别上,所以它可以应用于所有的窗口系统,例如:X11,Windows 和 Mac 系统。RFB有RealVNC公司维护和更新,RFB协议定义了远程图形用户客户端与服务器端的交互规则,如协商RFB协议版本、协商安全类型、协商像素格式编码方式等。RFB协议的具体内容可以参见RealVNC公司RFB协议文档http://tools.ietf.org/pdf/rfc6143.pdf。
2、VNC源码分析
以windows系统的RealVNC的源码为基础来分析VNC在windows平台的具体
实现。vnc-4_1_3-winsrc目录下有两个目录common和win目录,其中common目录下放着各个平台公用的模块,win目录下放着为windows系统特的开发的模块。其目录结构如下图:
common目录下的network实现了对套接字的封装;rdr实现了对输入输出IO操作的封装,网络套接字的接收和发送也由模块下的Instream、OutStream及其派生类实现的;rfb是非常重要的模块,VNC中大多机制的实现及消息、事件的处理都是在该模块完成的;Xregion是为X11封装的region类,在windows平台上无需关注;zlib是一个压缩模块,ZRLE编码会使用到该模块;javabin模块为浏览器访问VNC服务器提供支持。
win目录下的logmessages为消息日志模块;rfb_win32为common目录下rfb模块的windows化,该模块下的很多类与rfb下的类同名,或继承自rfb下的类以实现某些类的windows特例化;vncconfig为配置窗口及其功能的实现;vncviewer为客户端的实现;winvnc为服务器端的实现;wm_hooks为一起dll工程,其实现一个全局hook,用来截获系统的绘制等信息。
RealVNC是用C++语言开发的,其中大量运用了名字空间,可以说其是对c++命名空间运用的典范。如rdr下的所有类、全局变量、函数等多包含在该rdr命名空间下,在源码中可以发现很多using namespace rdr、using namespace rfb、using namespace win32的地方。RealVNC的windows源码运用了消息和事件处驱动机制,有消息、事件的到来、触发来驱动