HyperV平台中虚拟机VNC协议接入方法与系统的制作方法

文档序号:9474344阅读:895来源:国知局
HyperV平台中虚拟机VNC协议接入方法与系统的制作方法
【技术领域】
[0001 ] 本发明涉及虚拟机技术领域,特别是涉及HyperV平台中虚拟机VNC (VirtualNetwork Computing,虚拟网络计算机)协议接入方法与系统。
【背景技术】
[0002]随着桌面虚拟化技术的发展,目前已有越来越多的公司和企业部署桌面虚拟化系统。在虚拟化桌面使用过程中,用户常需用到虚拟化平台,比如HyperV。
[0003]HyperV是微软提出的一种系统管理程序虚拟化技术,能够有效实现桌面虚拟化,HyperV性能优异,目前已经得到广泛应用。
[0004]但是在HyperV平台创建的虚拟机,只能通过RDP(Remote Desktop Protocol,远程桌面协议)接入访问,没有像其他虚拟化平台(Xen、VMffare, KVM)提供VNC协议接入访问,这样导致HyperV平台与其他虚拟化平台的不兼容,严重制约HyperV平台的推广与应用。

【发明内容】

[0005]基于此,有必要针对目前HyperV平台中无虚拟机VNC协议接入,严重制约HyperV平台的推广与应用的问题,提供一种HyperV平台中虚拟机VNC协议接入方法与系统,促进HyperV平台的推广与应用。
[0006]—种HyperV平台中虚拟机VNC协议接入方法,包括步骤:
[0007]获取HyperV平台中虚拟机WMI(Windows Management Instrumentat1n,公共信息模型对象管理器)管理接口;
[0008]初始化所述丽I管理接口与VNC端口的Socket,创建侦听线程;
[0009]侦听VNC客户端的Socket连接,创建数据处理线程;
[0010]利用所述数据处理线程和所述WMI管理接口,响应VNC客户端请求,其中,所述VNC客户端请求包括VNC客户端屏幕刷新、VNC客户端键盘操作以及VNC客户端鼠标动作。
[0011 ] 一种HyperV平台中虚拟机VNC协议接入系统,包括:
[0012]接口获取模块,用于获取HyperV平台中所述WMI管理接口 ;
[0013]侦听线程创建模块,用于初始化所述WMI管理接口与VNC端口的Socket,创建侦听线程;
[0014]数据处理线程创建模块,用于侦听VNC客户端的Socket连接,创建数据处理线程;
[0015]响应模块,用于利用所述数据处理线程和所述丽I管理接口,响应VNC客户端请求,其中,所述VNC客户端请求包括VNC客户端屏幕刷新、VNC客户端键盘操作以及VNC客户端鼠标动作。
[0016]本发明HyperV平台中虚拟机VNC协议接入方法与系统,获取HyperV平台中所述WMI管理接口,初始化Socket,创建侦听线程,侦听VNC客户端的Socket连接,创建数据处理线程,利用数据处理线程和所述WMI管理接口,响应VNC客户端请求。整个过程中,采用简单处理方式,使得HyperV平台中虚拟机能够响应VNC客户端请求,实现HyperV平台中虚拟机的VNC协议的接入,促进HyperV平台的推广与应用。
【附图说明】
[0017]图1为本发明HyperV平台中虚拟机VNC协议接入方法第一个实施例的流程示意图;
[0018]图2为本发明HyperV平台中虚拟机VNC协议接入方法第二个实施例的流程示意图;
[0019]图3为本发明HyperV平台中虚拟机VNC协议接入系统第一个实施例的结构示意图;
[0020]图4为本发明HyperV平台中虚拟机VNC协议接入系统第二个实施例的结构示意图。
【具体实施方式】
[0021 ] 如图1所示,一种HyperV平台中虚拟机VNC协议接入方法,包括步骤:
[0022]S200:获取HyperV平台中所述WMI管理接口。
[0023]HyperV是微软的一款虚拟化产品,是微软第一个采用类似Vmware和Citrix开源Xen —样的基于hypervisor的技术。HyperV设计的目的是为广泛的用户提供更为熟悉以及成本效益更高的虚拟化基础设施软件,这样可以降低运作成本、提高硬件利用率、优化基础设施并提高服务器的可用性。丽I,是Wind0ws2K/XP管理系统的核心,对于其他的Win32 操作系统,WMI 是一个有用的插件。WMI 以(ΠΜ0Μ (Common Informat1n Model ObjectManager,公共信息模型对象管理器)为基础,是一个描述操作系统构成单元的对象数据库,为MMC (MicrosoftManagement Console,管理微软管理控制台工具)和脚本程序提供了一个访问操作系统构成单元的公共接口。
[0024]S400:初始化所述WMI管理接口与VNC端口的Socket,创建侦听线程。
[0025]申请Socket,调用bind绑定分配给虚拟机的VNC端口,调用listen侦探连接,仓1J建侦听线程。
[0026]S600:侦听VNC客户端的Socket连接,创建数据处理线程。
[0027]侦听线程侦听VNC客户端的Socket连接,具体是来说,是侦听VNC客户端新Socket连接,创建数据处理线程。
[0028]S800:利用所述数据处理线程和所述WMI管理接口,响应VNC客户端请求,其中,所述VNC客户端请求包括VNC客户端屏幕刷新、VNC客户端键盘操作以及VNC客户端鼠标动作。
[0029]VNC客户端请求包括但不限于VNC客户端屏幕刷新、VNC客户端键盘操作以及VNC客户端鼠标动作。HyperV平台中虚拟机响应VNC客户端请求,实现HyperV平台中虚拟机的VNC协议的接入,促进HyperV平台的推广与应用。
[0030]针对VNC客户端屏幕刷新、VNC客户端键盘操作以及VNC客户端鼠标动作三种不同的请求,可以利用数据处理线程和所述WMI管理接口分别采用不同的方式响应,在其中一个具体实施例中,其响应方式如下:
[0031]当接收屏幕刷新请求数据包时,利用所述丽I管理接口,执行所述丽I管理接口中GetVirtualSystemThumbnaillmage,获得显示的图像数据,将所述显示的图像数据格式化,获得格式化数据流,发送所述格式化数据流至VNC客户端;当接收键盘操作请求数据包时,根据键盘操作请求数据包,获取键盘操作请求数据包中键盘码,调用所述WMI管理接口中Msvm_Keyboard的typeKey响应键盘操作;当接收鼠标动作请求数据包时,根据鼠标动作请求数据包,获取鼠标指针位置信息和鼠标按下标志,调用所述丽I管理接口中Msvm_SyntheticMouse 的 setAbsolutePosit1n 响应鼠标操作。
[0032]本发明HyperV平台中虚拟机VNC协议接入方法,获取HyperV平台中所述WMI管理接口,初始化Socket,创建侦听线程,侦听VNC客户端的Socket连接,创建数据处理线程,利用数据处理线程和所述WMI管理接口,响应VNC客户端请求。整个过程中,采用简单处理方式,使得HyperV平台中虚拟机能够响应VNC客户端请求,实现HyperV平台中虚拟机的VNC协议的接入,促进HyperV平台的推广与应用。
[0033]如图2所示,在其中一个实施例中,步骤S200之后还有步骤:
[0034]S320:利用所述HyperV平台中所述WMI管理接口,获取HyperV平台中虚拟机对应的接口实例;
[0035]S340:利用所述HyperV平台中虚拟机对应的接口实例,获取虚拟机的屏幕分辨率。
[0036]虚拟机的屏幕分辨率是在响应屏幕刷新请求必须采集的数据,在本实施例中,借助HyperV平台中所述WMI管理接口,事先获取虚拟机的屏幕分辨率,以便后续响应操作更加迅速、高效。
[0037]如图2所示,在其中一个实施例中,步骤S800之前还有步骤:
[0038]S700:接收VNC客户端的VNC版本协商,发送初始化的数据包至VNC客户端,其中,所述初始化数据包设置有虚拟机像素格式、虚拟机显示界面高度、虚拟机显示界面宽度以及虚拟机屏幕分辨率。
[0039]HyperV平台中虚拟机接收VNC客户端的VNC版本协商,回复确定指令,发送初始化的数据包至VNC客户端。初始化数据包中设置有虚拟机像素格式、虚拟机显示界面高度、虚拟机显示界面宽度以及虚拟机屏幕分辨率。
[0040]在其中一个实施例中,所述虚拟机像素格式为565格式。
[0041]在其中一个实施例中,所述利用所述数据处理线程和所述WMI管理接口,响应VNC客户端请求具体包括步骤:
[0042]步骤一:利用所述数据处理线程,接收VNC客户端请求数据包,其中,所述VNC客户端请求数据包包括屏幕刷新请求数据包、键盘操作请求数据包以及鼠标动作请求数据包。
[0043]步骤二:当接收屏幕刷新请求数据包时,利用所述丽I管理接口,执行所述丽I管理接口中GetVirtualSystemThumbnaillmage,获得显示的图像数据,将所述显示的图像数据格式化,获得格式化数据流,发送所述格式化数据流至VNC客户端。
[0044]接收屏幕刷新请求数据包CLIENT_FRAMEBUFFER_UPDATE_REQUEST利用获得的所述WMI管理接口,执行所述WMI管理接口中GetVirtualSystemThumbnaillmage,获得显示的图像数据(Imagedata),获得数据后,格式化数据流,然后发送到VNC客户端。
[0045]步骤三:当接收键盘操作请求数据包时,根据键盘操作请求数据包,获取键盘操作请求数据包中键盘码,调用所述WMI管理接口中Msvm_Keyboard的typeKey响应键盘操作。
[0046]接收到VNC客户端的键盘操作请求数据包CLIENT_KEYBOARD_EVENT,获得数据包的键盘码,当键盘码表征键盘按下操作时,调用所述丽I管理接口中Msvm_Keyboard的typeKey,响应键盘操作;当键盘码表征键盘释放时,调用所述丽I管理接口中Msvm_Keyboard的releaseKey,释放键盘操作。
[0047]步骤四:当接收鼠标动作请求数据包时,根据鼠标动作请
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1