发明内容
基于此,有必要针对目前HyperV平台中无虚拟机VNC协议接入,严重制约HyperV平台的推广与应用的问题,提供一种HyperV平台中虚拟机VNC协议接入方法与系统,促进HyperV平台的推广与应用。
一种HyperV平台中虚拟机VNC协议接入方法,包括步骤:
获取HyperV平台中虚拟机WMI(Windows Management Instrumentation, 公共信息模型对象管理器)管理接口;
初始化所述WMI管理接口与VNC端口的Socket,创建侦听线程;
侦听VNC客户端的Socket连接,创建数据处理线程;
利用所述数据处理线程和所述WMI管理接口,响应VNC客户端请求,其 中,所述VNC客户端请求包括VNC客户端屏幕刷新、VNC客户端键盘操作以 及VNC客户端鼠标动作。
一种HyperV平台中虚拟机VNC协议接入系统,包括:
接口获取模块,用于获取HyperV平台中所述WMI管理接口;
侦听线程创建模块,用于初始化所述WMI管理接口与VNC端口的Socket,创建侦听线程;
数据处理线程创建模块,用于侦听VNC客户端的Socket连接,创建数据处理线程;
响应模块,用于利用所述数据处理线程和所述WMI管理接口,响应VNC客户端请求,其中,所述VNC客户端请求包括VNC客户端屏幕刷新、VNC客户端键盘操作以及VNC客户端鼠标动作。
本发明HyperV平台中虚拟机VNC协议接入方法与系统,获取HyperV平台中所述WMI管理接口,初始化Socket,创建侦听线程,侦听VNC客户端的Socket连接,创建数据处理线程,利用数据处理线程和所述WMI管理接口,响应VNC客户端请求。整个过程中,采用简单处理方式,使得HyperV平台中虚拟机能够响应VNC客户端请求,实现HyperV平台中虚拟机的VNC协议的接入,促进HyperV平台的推广与应用。
具体实施方式
如图1所示,一种HyperV平台中虚拟机VNC协议接入方法,包括步骤:
S200:获取HyperV平台中所述WMI管理接口。
HyperV是微软的一款虚拟化产品,是微软第一个采用类似Vmware和Citrix开源Xen一样的基于hypervisor的技术。HyperV设计的目的是为广泛的用户提供更为熟悉以及成本效益更高的虚拟化基础设施软件,这样可以降低运作成本、提高硬件利用率、优化基础设施并提高服务器的可用性。WMI,是Windows 2K/XP管理系统的核心,对于其他的Win32操作系统,WMI是一个有用的插件。WMI以CIMOM(Common Information Model Objec Manager,公共信息模型对象管理器)为基础,是一个描述操作系统构成单元的对象数据库,为MMC(Microsoft Management Console,管理微软管理控制台工具)和脚本程序提供了一个访问操作系统构成单元的公共接口。
S400:初始化所述WMI管理接口与VNC端口的Socket,创建侦听线程。
申请Socket,调用bind绑定分配给虚拟机的VNC端口,调用listen侦探连接,创建侦听线程。
S600:侦听VNC客户端的Socket连接,创建数据处理线程。
侦听线程侦听VNC客户端的Socket连接,具体是来说,是侦听VNC客户端新Socket连接,创建数据处理线程。
S800:利用所述数据处理线程和所述WMI管理接口,响应VNC客户端请求,其中,所述VNC客户端请求包括VNC客户端屏幕刷新、VNC客户端键盘操作以及VNC客户端鼠标动作。
VNC客户端请求包括但不限于VNC客户端屏幕刷新、VNC客户端键盘操作以及VNC客户端鼠标动作。HyperV平台中虚拟机响应VNC客户端请求,实现HyperV平台中虚拟机的VNC协议的接入,促进HyperV平台的推广与应用。
针对VNC客户端屏幕刷新、VNC客户端键盘操作以及VNC客户端鼠标动作三种不同的请求,可以利用数据处理线程和所述WMI管理接口分别采用不同的方式响应,在其中一个具体实施例中,其响应方式如下:
当接收屏幕刷新请求数据包时,利用所述WMI管理接口,执行所述WMI管理接口中Get Virtual System Thumbnail Image,获得显示的图像数据,将所述显示的图像数据格式化,获得格式化数据流,发送所述格式化数据流至VNC客户端;当接收键盘操作请求数据包时,根据键盘操作请求数据包,获取键盘操作请求数据包中键盘码,调用所述WMI管理接口中Msvm_Keyboard的type Key响应键盘操作;当接收鼠标动作请求数据包时,根据鼠标动作请求数据包,获取鼠标指针位置信息和鼠标按下标志,调用所述WMI管理接口中Msvm_Synthetic Mouse的set Absolute Position响应鼠标操作。
本发明HyperV平台中虚拟机VNC协议接入方法,获取HyperV平台中所述WMI管理接口,初始化Socket,创建侦听线程,侦听VNC客户端的Socket连接,创建数据处理线程,利用数据处理线程和所述WMI管理接口,响应VNC客户端请求。整个过程中,采用简单处理方式,使得HyperV平台中虚拟机能够响应VNC客户端请求,实现HyperV平台中虚拟机的VNC协议的接入,促进HyperV平台的推广与应用。
如图2所示,在其中一个实施例中,步骤S200之后还有步骤:
S320:利用所述HyperV平台中所述WMI管理接口,获取HyperV平台中虚拟机对应的接口实例;
S340:利用所述HyperV平台中虚拟机对应的接口实例,获取虚拟机的屏幕分辨率。
虚拟机的屏幕分辨率是在响应屏幕刷新请求必须采集的数据,在本实施例中,借助HyperV平台中所述WMI管理接口,事先获取虚拟机的屏幕分辨率,以便后续响应操作更加迅速、高效。
如图2所示,在其中一个实施例中,步骤S800之前还有步骤:
S700:接收VNC客户端的VNC版本协商,发送初始化的数据包至VNC客户端,其中,所述初始化数据包设置有虚拟机像素格式、虚拟机显示界面高度、虚拟机显示界面宽度以及虚拟机屏幕分辨率。
HyperV平台中虚拟机接收VNC客户端的VNC版本协商,回复确定指令,发送初始化的数据包至VNC客户端。初始化数据包中设置有虚拟机像素格式、虚拟机显示界面高度、虚拟机显示界面宽度以及虚拟机屏幕分辨率。
在其中一个实施例中,所述虚拟机像素格式为565格式。
在其中一个实施例中,所述利用所述数据处理线程和所述WMI管理接口,响应VNC客户端请求具体包括步骤:
步骤一:利用所述数据处理线程,接收VNC客户端请求数据包,其中,所述VNC客户端请求数据包包括屏幕刷新请求数据包、键盘操作请求数据包以及鼠标动作请求数据包。
步骤二:当接收屏幕刷新请求数据包时,利用所述WMI管理接口,执行所述WMI管理接口中Get Virtual System Thumbnail Image,获得显示的图像数据,将所述显示的图像数据格式化,获得格式化数据流,发送所述格式化数据流至VNC客户端。
接收屏幕刷新请求数据包CLIENT_FRAMEBUFFER_UPDATE_REQUEST利用获得的所述WMI管理接口,执行所述WMI管理接口中Get Virtual System Thumbnail Image,获得显示的图像数据(Imagedata),获得数据后,格式化数据流,然后发送到VNC客户端。
步骤三:当接收键盘操作请求数据包时,根据键盘操作请求数据包,获取键盘操作请求数据包中键盘码,调用所述WMI管理接口中Msvm_Keyboard的type Key响应键盘操作。
接收到VNC客户端的键盘操作请求数据包CLIENT_KEYBOARD_EVENT,获得数据包的键盘码,当键盘码表征键盘按下操作时,调用所述WMI管理接口中Msvm_Keyboard的typeKey,响应键盘操作;当键盘码表征键盘释放时,调用所述WMI管理接口中Msvm_Keyboard的release Key,释放键盘操作。
步骤四:当接收鼠标动作请求数据包时,根据鼠标动作请求数据包,获取鼠标指针位置信息和鼠标按下标志,调用所述WMI管理接口中Msvm_Synthetic Mouse的setAbsolute Position响应鼠标操作。
接收到VNC客户端的鼠标动作请求数据包CLIENT_POINTER_EVENT,获取当前的鼠标指针位置信息X和Y以及左键与右键按下标志,然后调用所述WMI管理接口中Msvm_Synthetic Mouse的set Absolute Position设置鼠标位置信息,如有键按下,再调用所述WMI管理接口中Msvm_Synthetic Mouse的 Click Button设置左键或右键按下。
如图3所示,一种HyperV平台中虚拟机VNC协议接入系统,包括:
接口获取模块100,用于获取HyperV平台中所述WMI管理接口;
侦听线程创建模块200,用于初始化所述WMI管理接口与VNC端口的Socket,创建侦听线程;
数据处理线程创建模块300,用于侦听VNC客户端的Socket连接,创建数据处理线程;
响应模块400,用于利用所述数据处理线程和所述WMI管理接口,响应VNC客户端请求,其中,所述VNC客户端请求包括VNC客户端屏幕刷新、VNC客户端键盘操作以及VNC客户端鼠标动作。
本发明HyperV平台中虚拟机VNC协议接入系统,接口获取模块100获取HyperV平台中所述WMI管理接口,侦听线程创建模块200初始化Socket,创建侦听线程,数据处理线程创建模块300侦听VNC客户端的Socket连接,创建数据处理线程,响应模块400利用数据处理线程和所述WMI管理接口,响应VNC客户端请求。整个过程中,采用简单处理方式,使得HyperV平台中虚拟机能够响应VNC客户端请求,实现HyperV平台中虚拟机的VNC协议的接入,促进HyperV平台的推广与应用。
如图4所示,在其中一个实施例中,所述HyperV平台中虚拟机VNC协议接入系统还包括:
接口实例获取模块500,用于利用所述HyperV平台中所述WMI管理接口,获取HyperV平台中虚拟机对应的接口实例;
分辨率获取模块600,用于利用所述HyperV平台中虚拟机对应的接口实例,获取虚拟机的屏幕分辨率。
如图4所示,在其中一个实施例中,所述HyperV平台中虚拟机VNC协议接入系统还包括:
初始化数据发送模块700,用于接收VNC客户端的VNC版本协商,发送初始化的数据包至VNC客户端,其中,所述初始化数据包设置有虚拟机像素格式、虚拟机显示界面高度、虚拟机显示界面宽度以及虚拟机屏幕分辨率。
在其中一个实施例中,所述虚拟机像素格式为565格式。
在其中一个实施例中,所述响应模块400具体包括:
接收单元,用于利用所述数据处理线程,接收VNC客户端请求数据包,其中,所述VNC客户端请求数据包包括屏幕刷新请求数据包、键盘操作请求数据包以及鼠标动作请求数据包;
屏幕刷新响应单元,用于当接收屏幕刷新请求数据包时,利用所述WMI管理接口,执行所述WMI管理接口中Get Virtual System Thumbnail Image,获得显示的图像数据,将所述显示的图像数据格式化,获得格式化数据流,发送所述格式化数据流至VNC客户端;
键盘操作响应单元,用于当接收键盘操作请求数据包时,根据键盘操作请求数据包,获取键盘操作请求数据包中键盘码,调用所述WMI管理接口中Msvm_Keyboard的typeKey响应键盘操作;
鼠标动作响应单元,用于当接收鼠标动作请求数据包时,根据鼠标动作请求数据包,获取鼠标指针位置信息和鼠标按下标志,调用所述WMI管理接口中Msvm_SyntheticMouse的set Absolute Position响应鼠标操作。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。