实现X11客户端和X11服务器连接的方法及系统转让专利

申请号 : CN200910086554.7

文献号 : CN101582890B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 高进军韩冀中王楠

申请人 : 中国科学院计算技术研究所

摘要 :

本发明涉及实现X11客户端和X11服务器连接的方法及系统,所述方法包括:步骤1,启动伪服务器,所述伪服务器侦听X11客户端发送的连接请求和X11服务器端发送的要求连接请求;步骤2,当所述伪服务器侦听到X11客户端的连接请求时,所述伪服务器作为一个X11服务器同所述X11客户端建立连接;步骤3,当所述伪服务器侦听到X11服务器的要求连接请求时,所述伪服务器作为一个X11客户端同所述X11服务器建立连接;步骤4,所述伪服务器在连接的X11客户端和X11服务器间转发数据包。本发明能够在X11客户端和X11服务器间实现松耦合连接,使得X11客户端不受X11服务器运行状态的影响。

权利要求 :

1.一种实现X11客户端和X11服务器连接的方法,其特征在于,所述方法包括:步骤1,启动伪服务器,所述伪服务器侦听X11客户端发送的连接请求和X11服务器端发送的要求连接请求;

步骤2,当所述伪服务器侦听到X11客户端的连接请求时,所述伪服务器作为一个X11服务器同所述X11客户端建立连接;

步骤3,当所述伪服务器侦听到X11服务器的要求连接请求时,所述伪服务器作为一个X11客户端同所述X11服务器建立连接;

步骤4,所述伪服务器在连接的X11客户端和X11服务器间转发数据包;

所述步骤2还包括,

步骤21,所述伪服务器接收所述X11客户端发送的资源生成指令,根据所述资源生成指令在所述伪服务器建立用于记录资源的属性的资源列表,并向所述伪服务器连接的X11服务器中要求同所述X11客户端连接的X11服务器发送资源生成指令,使所述X11服务器生成所述资源列表的副本;

所述步骤3还包括,

步骤22,在所述X11服务器要求连接的X11客户端已启动并已同所述伪服务器连接时,所述伪服务器向所述X11服务器发送资源生成指令,使所述X11服务器生成所述X11客户端在所述伪服务器中的资源列表的副本。

2.如权利要求1所述的实现X11客户端和X11服务器连接的方法,其特征在于,所述步骤4进一步为,步骤31,所述伪服务器接收连接的X11客户端发送的资源属性设置指令,解析所述资源属性设置指令;

步骤32,提取维护资源列表所需的资源属性设置指令,根据所述资源属性设置指令修改所述X11客户端在所述伪服务器中的资源列表,将所述资源属性设置指令发送给要求同所述X11客户端连接的X11服务器,使伪服务器端的资源属性和X11服务器端的资源属性保持一致。

3.如权利要求1所述的实现X11客户端和X11服务器连接的方法,其特征在于,所述步骤21还包括:步骤41,所述伪服务器在建立所述资源列表时,为所述资源列表中的资源分配ID,并将分配的ID返回给所述X11客户端;

所述步骤21和步骤22中在所述伪服务器发送完所述资源生成指令后,还包括:

步骤42,所述X11服务器在生成所述资源列表的副本时,为所述副本中资源分配ID,并将所述ID返回给所述伪服务器;

步骤43,所述伪服务器接收所述X11服务器返回的所述ID。

4.如权利要求3所述的实现X11客户端和X11服务器连接的方法,其特征在于,所述步骤4进一步为,步骤51,所述伪服务器接收连接的X11客户端发送的绘图指令,如果所述伪服务器已同要求连接所述X11客户端的X11服务器连接,则执行步骤52,否则,丢弃所述绘图指令;

步骤52,解析所述绘图指令,修改所述绘图指令中地址信息为所述X11服务器对应地址,修改所述绘图指令中资源的ID为所述X11服务器为所述资源分配的ID,将所述绘图指令发送给所述X11服务器。

5.如权利要求3所述的实现X11客户端和X11服务器连接的方法,其特征在于,所述步骤4进一步为,步骤61,所述伪服务器接收连接的X11服务器发送的应答指令,解析所述应答指令,修改所述应答指令中地址信息为所述X11服务器要求连接的X11客户端对应地址,修改所述应答指令中资源的ID为所述伪服务器为所述X11客户端的资源分配的ID,将所述应答指令发送给所述X11客户端。

6.如权利要求1所述的实现X11客户端和X11服务器连接的方法,其特征在于,所述步骤3还包括,步骤71,在所述X11服务器要求连接的X11客户端已经同所述伪服务器连接时,所述伪服务器向所述X11客户端发送expose事件,以使所述X11客户端发送绘图指令;

步骤72,所述伪服务器接收到所述X11客户端发送的绘图指令后,将所述绘图指令转发给所述X11服务器。

7.如权利要求1所述的实现X11客户端和X11服务器连接的方法,其特征在于,所述步骤2还包括,步骤81,所述伪服务器同所述X11客户端建立完连接后,为所述客户端分配客户端标识;

所述步骤3还包括,

步骤82,所述伪服务器同所述X11服务器建立完连接后,将同所述伪服务器连接的X11客户端的客户端标识发送给所述X11服务器,以使所述X11服务器从同所述伪服务器连接的X11客户端中选择要求连接的X11客户端。

8.一种实现X11客户端和X11服务器连接的系统,其特征在于,所述系统为伪服务器,所述伪服务器包括:侦听模块,用于侦听X11客户端发送的连接请求和X11服务器端发送的要求连接请求;

建立客户端连接模块,用于当所述侦听模块侦听到X11客户端的连接请求时,使所述伪服务器作为一个X11服务器同所述X11客户端建立连接;

建立服务器连接模块,用于当所述侦听模块侦听到X11服务器的要求连接请求时,使所述伪服务器作为一个X11客户端同所述X11服务器建立连接;

转发模块,用于在连接的X11客户端和X11服务器间转发数据包;

所述建立客户端连接模块还用于接收所述X11客户端发送的资源生成指令,根据所述资源生成指令在所述伪服务器建立用于记录资源的属性的资源列表;并向所述伪服务器连接的X11服务器中要求同所述X11客户端连接的X11服务器发送资源生成指令,使所述X11服务器生成所述资源列表的副本;

所述建立服务器连接模块还用于在连接的所述X11服务器要求连接的X11客户端已启动并已同所述伪服务器连接时,向所述X11服务器发送资源生成指令,使所述X11服务器生成所述X11客户端在所述伪服务器中的资源列表的副本。

9.如权利要求8所述的实现X11客户端和X11服务器连接的系统,其特征在于,所述转发模块进一步用于接收连接的X11客户端发送的资源属性设置指令,解析所述资源属性设置指令;提取维护资源列表所需的资源属性设置指令,根据所述资源属性设置指令修改所述X11客户端在所述伪服务器中的资源列表,将所述资源属性设置指令发送给要求同所述X11客户端连接的X11服务器,使伪服务器端的资源属性和X11服务器端的资源属性保持一致。

10.如权利要求8所述的实现X11客户端和X11服务器连接的系统,其特征在于,所述X11服务器在生成所述资源列表的副本时,为所述副本中资源分配ID,并将所述ID返回给所述伪服务器;

所述建立服务器连接模块还用于接收所述X11服务器返回的所述ID;

所述建立客户端连接模块还用于在建立所述资源列表时,为所述资源列表中的资源分配ID,并将分配的ID返回给所述X11客户端。

11.如权利要求10所述的实现X11客户端和X11服务器连接的系统,其特征在于,所述转发模块进一步用于接收连接的X11客户端发送的绘图指令,如果所述伪服务器已同要求连接所述X11客户端的X11服务器连接,则解析所述绘图指令,修改所述绘图指令中地址信息为所述X11服务器对应地址,修改所述绘图指令中资源的ID为所述X11服务器为所述资源分配的ID,将所述绘图指令发送给所述X11服务器,否则,丢弃所述绘图指令。

12.如权利要求10所述的实现X11客户端和X11服务器连接的系统,其特征在于,所述转发模块进一步用于接收连接的X11服务器发送的应答指令,解析所述应答指令,修改所述应答指令中地址信息为所述X11服务器要求连接的X11客户端对应地址,修改所述应答指令中资源的ID为所述伪服务器为所述X11客户端的资源分配的ID,将所述应答指令发送给所述X11客户端。

13.如权利要求8所述的实现X11客户端和X11服务器连接的系统,其特征在于,所述建立服务器连接模块还用于在所述X11服务器要求连接的X11客户端已经同所述伪服务器连接时,向所述X11客户端发送expose事件,以使所述X11客户端发送绘图指令;接收到所述X11客户端发送的绘图指令后,将所述绘图指令转发给所述X11服务器。

14.如权利要求8所述的实现X11客户端和X11服务器连接的系统,其特征在于,所述建立客户端连接模块还用于同所述X11客户端建立完连接后,为所述客户端分配客户端标识;

所述建立服务器连接模块还用于同所述X11服务器建立完连接后,将同所述伪服务器连接的X11客户端的客户端标识发送给所述X11服务器,以使所述X11服务器从同所述伪服务器连接的X11客户端中选择要求连接的X11客户端。

说明书 :

实现X11客户端和X11服务器连接的方法及系统

技术领域

[0001] 本发明涉及到X11(X Window System Protocol Version 11,X视窗系统版本11)协议,尤其涉及实现X11客户端和X11服务器连接的方法及系统。

背景技术

[0002] X Window System(X视窗系统)是一套视窗系统,最初由MIT(麻省理工学院)为Unix类操作系统开发,现在已广泛应用在Linux、Unix、BSD等操作系统中,X视窗系统和微软公司的视窗操作系统有很大区别,微软公司的视窗系统由操作系统内建,而X视窗系统不由操作系统内建,它只是一个普通的软件系统,各种类Unix操作系统可以利用它实现图形界面的操作,比如鼠标操作;Linux或者Unix没有它也可以运行,只是无法支持有图形界面输出的程序。X视窗系统自从发布以来获得了很大的发展,在X11的核心协议之外又增加了很多扩展协议,这些扩展协议和核心协议一起方便了人们对X11的开发应用。
[0003] X视窗系统是基于C/S(Client/Server,客户端/服务器)模式,各种X11应用程序都是X客户端,X服务器现在通用的有X.org和XFree86发布的服务器,关于X视窗系统的内容如″The X Window System″,Software:Practiceand Experience,1990中所述。
[0004] X11服务器之间的窗口共享是基于X视窗系统C/S模式的一个应用,该应用主要内容是实现同一个窗口在不同的X11服务器之间共享;此处共享指某个窗口被多个X11服务器显示。当前提出的共享方式有很多种,但从本质上来说有两种,一种是通过窗口复制的方法将一个X11服务器上的窗口复制到另一个X11服务器上;另一种是通过窗口迁移的方法将一个X11服务器上的窗口迁移到另一个X11服务器上,关于窗口共享方式的内容如“Collaborative sharing of windows between Mac OS X,the X WindowSystem and Windows”,In Proceedings of Norsk Informatikkonferanse,NIK 2004.Stavanger,Norway,November 2004,中所述。
[0005] 现在已经有一些协议和软件通过在X11服务器和X11客户端之间插入一个服务器来实现不同的X11服务器之间窗口或桌面共享,如VNC和XMove,关于VNC和XMove如 ″ Virtual Network Computing ″,IEEE INTERNETCOMPUTING,1998和 ″ XMOVE:A PSEUDOSERVER FOR X WINDOW MOVEMENT″,TheX Resource,Issue 11,pp.143-170,July1994所述。VNC是一个应用比较广泛的桌面共享协议,XMove软件可以实现X11服务器之间的窗口迁移,VNC协议实现的是整个桌面的共享,而XMove实现的是单个窗口在X11服务器之间的迁移。VNC和XMove实现的功能虽然不同,但它们实现的方法在本质上相同,都是通过将本地X11服务器上的帧缓冲(framebuffer)以压缩图片的形式传送到其他X11服务器来实现共享。以帧缓冲压缩图片为技术基础的实现会存在该技术自身无法克服的缺陷,首先是对网络带宽的压力,如果应用程序窗口变化比较快,就会导致程序性能迅速下降,响应变慢;其次是对共享窗口的X11服务器数目有限制,多个X11服务器就需要同时发送多个帧缓冲图片,此时网络带宽将会成为瓶颈。
[0006] 现有技术中,一旦X11服务器和X11客户端断开连接,X11客户端就会退出运行。这将对需要长时间运行的X11应用程序不利,因为这些X11应用程序生成的窗口不能关闭,必须一直开着,一旦关闭,相当于断开X11服务器和X11客户端的连接,就会导致应用程序退出运行。VNC和Xmove都没有断开X11应用程序和X11服务器的连接,只是将X11服务器端的framebuffer以图片的形式发送到另一个X11服务器上进行显示,而实际的X11客户端仍然和最初建立连接的X11服务器连接。

发明内容

[0007] 为解决上述问题,本发明提供了一种实现X11客户端和X11服务器连接的方法及系统,能够在X11客户端和X11服务器间实现松耦合连接,使得X11客户端不受X11服务器运行状态的影响。
[0008] 本发明公开了实现X11客户端和X11服务器连接的方法,所述方法包括:
[0009] 步骤1,启动伪服务器,所述伪服务器侦听X11客户端发送的连接请求和X11服务器端发送的要求连接请求;
[0010] 步骤2,当所述伪服务器侦听到X11客户端的连接请求时,所述伪服务器作为一个X11服务器同所述X11客户端建立连接;
[0011] 步骤3,当所述伪服务器侦听到X11服务器的要求连接请求时,所述伪服务器作为一个X11客户端同所述X11服务器建立连接;
[0012] 步骤4,所述伪服务器在连接的X11客户端和X11服务器间转发数据包。
[0013] 所述步骤2还包括,
[0014] 步骤21,所述伪服务器接收所述X11客户端发送的资源生成指令,根据所述资源生成指令在所述伪服务器建立用于记录资源的属性的资源列表;并向所述伪服务器连接的X11服务器中要求同所述X11客户端连接的X11服务器发送资源生成指令,使所述X11服务器生成所述资源列表的副本;
[0015] 所述步骤3还包括,
[0016] 步骤22,在所述X11服务器要求连接的X11客户端已启动并已同所述伪服务器连接时,所述伪服务器向所述X11服务器发送资源生成指令,使所述X11服务器生成所述X11客户端在所述伪服务器中的资源列表的副本。
[0017] 所述步骤4进一步为,
[0018] 步骤31,所述伪服务器接收连接的X11客户端发送的资源属性设置指令,解析所述资源属性设置指令;
[0019] 步骤32,提取维护资源列表所需的资源属性设置指令,根据所述资源属性设置指令修改所述X11客户端在所述伪服务器中的资源列表,将所述资源属性设置指令发送给要求同所述X11客户端连接的X11服务器,使伪服务器端的资源属性和X11服务器端的资源属性保持一致。
[0020] 所述步骤21还包括:
[0021] 步骤41,所述伪服务器在建立所述资源列表时,为所述资源列表中的资源分配ID,并将分配的ID返回给所述X11客户端;
[0022] 所述步骤21和步骤22中在所述伪服务器发送完所述资源生成指令后,还包括:
[0023] 步骤42,所述X11服务器在生成所述资源列表的副本时,为所述副本中资源分配ID,并将所述ID返回给所述伪服务器;
[0024] 步骤43,所述伪服务器接收所述X11服务器返回的所述ID。
[0025] 所述步骤4进一步为,
[0026] 步骤51,所述伪服务器接收连接的X11客户端发送的绘图指令,如果所述伪服务器已同要求连接所述X11客户端的X11服务器连接,则执行步骤52,否则,丢弃所述绘图指令;
[0027] 步骤52,解析所述绘图指令,修改所述绘图指令中地址信息为所述X11服务器对应地址,修改所述绘图指令中资源的ID为所述X11服务器为所述资源分配的ID,将所述绘图指令发送给所述X11服务器。
[0028] 所述步骤4进一步为,
[0029] 步骤61,所述伪服务器接收连接的X11服务器发送的应答指令,解析所述应答指令,修改所述应答指令中地址信息为所述X11服务器要求连接的X11客户端对应地址,修改所述应答指令中资源的ID为所述伪服务器为所述X11客户端的资源分配的ID,将所述应答指令发送给所述X11客户端。
[0030] 所述步骤3还包括,
[0031] 步骤71,在所述X11服务器要求连接的X11客户端已经同所述伪服务器连接时,所述伪服务器向所述X11客户端发送expose事件,以使所述X11客户端发送绘图指令;
[0032] 步骤72,所述伪服务器接收到所述X11客户端发送的绘图指令后,将所述绘图指令转发给所述X11服务器。
[0033] 所述步骤2还包括,
[0034] 步骤81,所述伪服务器同所述X11客户端建立完连接后,为所述客户端分配客户端标识;
[0035] 所述步骤3还包括,
[0036] 步骤82,所述伪服务器同所述X11服务器建立完连接后,将同所述伪服务器连接的X11客户端的客户端标识发送给所述X11服务器,以使所述X11服务器从同所述伪服务器连接的X11客户端中选择要求连接的X11客户端。
[0037] 本发明还公开了实现X11客户端和X11服务器连接的系统,所述系统为伪服务器,所述伪服务器包括:
[0038] 侦听模块,用于侦听X11客户端发送的连接请求和X11服务器端发送的要求连接请求;
[0039] 建立客户端连接模块,用于当所述侦听模块侦听到X11客户端的连接请求时,使所述伪服务器作为一个X11服务器同所述X11客户端建立连接;
[0040] 建立服务器连接模块,用于当所述侦听模块侦听到X11服务器的要求连接请求时,使所述伪服务器作为一个X11客户端同所述X11服务器建立连接;
[0041] 转发模块,用于在连接的X11客户端和X11服务器间转发数据包。
[0042] 所述建立客户端连接模块还用于接收所述X11客户端发送的资源生成指令,根据所述资源生成指令在所述伪服务器建立用于记录资源的属性的资源列表;并向所述伪服务器连接的X11服务器中要求同所述X11客户端连接的X11服务器发送资源生成指令,使所述X11服务器生成所述资源列表的副本;
[0043] 所述建立服务器连接模块还用于在连接的所述X11服务器要求连接的X11客户端已启动并已同所述伪服务器连接时,向所述X11服务器发送资源生成指令,使所述X11服务器生成所述X11客户端在所述伪服务器中的资源列表的副本。
[0044] 所述转发模块进一步用于接收连接的X11客户端发送的资源属性设置指令,解析所述资源属性设置指令;提取维护资源列表所需的资源属性设置指令,根据所述资源属性设置指令修改所述X11客户端在所述伪服务器中的资源列表,将所述资源属性设置指令发送给要求同所述X11客户端连接的X11服务器,使伪服务器端的资源属性和X11服务器端的资源属性保持一致。
[0045] 所述X11服务器在生成所述资源列表的副本时,为所述副本中资源分配ID,并将所述ID返回给所述伪服务器;
[0046] 所述建立服务器连接模块还用于接收所述X11服务器返回的所述ID;
[0047] 所述建立客户端连接模块还用于在建立所述资源列表时,为所述资源列表中的资源分配ID,并将分配的ID返回给所述X11客户端。
[0048] 所述转发模块进一步用于接收连接的X11客户端发送的绘图指令,如果所述伪服务器已同要求连接所述X11客户端的X11服务器连接,则解析所述绘图指令,修改所述绘图指令中地址信息为所述X11服务器对应地址,修改所述绘图指令中资源的ID为所述X11服务器为所述资源分配的ID,将所述绘图指令发送给所述X11服务器,否则,丢弃所述绘图指令。
[0049] 所述转发模块进一步用于接收连接的X11服务器发送的应答指令,解析所述应答指令,修改所述应答指令中地址信息为所述X11服务器要求连接的X11客户端对应地址,修改所述应答指令中资源的ID为所述伪服务器为所述X11客户端的资源分配的ID,将所述应答指令发送给所述X11客户端。
[0050] 所述建立服务器连接模块还用于在所述X11服务器要求连接的X11客户端已经同所述伪服务器连接时,向所述X11客户端发送expose事件,以使所述X11客户端发送绘图指令;接收到所述X11客户端发送的绘图指令后,将所述绘图指令转发给所述X11服务器。
[0051] 所述建立客户端连接模块还用于同所述X11客户端建立完连接后,为所述客户端分配客户端标识;
[0052] 所述建立服务器连接模块还用于同所述X11服务器建立完连接后,将同所述伪服务器连接的X11客户端的客户端标识发送给所述X11服务器,以使所述X11服务器从同所述伪服务器连接的X11客户端中选择要求连接的X11客户端。
[0053] 本发明的有益效果在于,X11客户端和X11服务器同伪服务器建立连接,并且由伪服务器转发X11客户端和X11服务器间请求和应答,使得X11客户端和X11服务器间实现松耦合连接,X11客户端不受X11服务器运行状态的影响;伪服务器实现X11服务器和X11客户端功能,使得不需改变现有X11服务器和X11客户端便可实现本发明,实现方便;通过用传递绘图指令替代传递帧缓冲压缩图片,减小网络带宽要求,降低网络传输压力。

附图说明

[0054] 图1是本发明的X11服务器和X11客户端所在系统的结构图;
[0055] 图2是本发明的实现X11服务器和X11客户端连接的方法流程图;
[0056] 图3是本发明的实现X11服务器和X11客户端连接的方法中伪服务器建立连接的具体实施方式流程图;
[0057] 图4是本发明的实现X11服务器和X11客户端连接的方法中伪服务器转发具体实施方式流程图;
[0058] 图5是本发明伪服务器的结构图。

具体实施方式

[0059] 下面结合附图,对本发明做进一步的详细描述。
[0060] 本发明的X11服务器和X11客户端所在系统的结构如图1所述,该系统包括多个X11服务器和多个X11客户端,该X11服务器和该X11客户端通过网络同伪服务器连接。
[0061] 本发明的方法如图2所示。
[0062] 步骤S201,启动伪服务器,该伪服务器侦听X11客户端的连接请求和X11服务器端的要求连接请求。
[0063] 步骤S202,当该伪服务器侦听到X11客户端的连接请求时,该伪服务器作为一个X11服务器同发送该连接请求的X11客户端建立连接。
[0064] 步骤S203,当该伪服务器侦听到X11服务器的要求连接请求时,该伪服务器作为一个X11客户端同发送该要求连接请求的X11服务器建立连接。
[0065] 步骤S204,该伪服务器在连接的X11客户端和X11服务器间转发数据包。
[0066] 在该系统中具体应用情景如下所述:
[0067] 步骤201,启动伪服务器。
[0068] 步骤202,运行X11客户端,伪服务器同X11客户端建立连接。
[0069] 步骤203,根据要求将伪服务器同指定的X11服务器建立连接,在该X11服务器上输出窗口。
[0070] 步骤204,在查看完中间结果或者不需要一直输出窗口时,断开X11服务器和伪服务器的连接。
[0071] 步骤205,重新连接断开后的X11服务器和伪服务器。
[0072] 步骤206,多个X11服务器同时和伪服务器连接,输出同一个X11客户端的窗口到该多个X11服务器。
[0073] 由于伪服务器在连接中分别实现X11服务器和X11客户端的功能,所以本发明无需改变系统中X11服务器和X11客户端,便于实现。
[0074] 在该系统中具体应用的另一个情景为,在启动伪服务器时,将该伪服务器连接到一个具体指定的X11服务器上,然后运行X11客户端并使其与伪服务器连接;X11客户端和X11服务器通过伪服务器建立连接后,可以在X11客户端运行的任何时候断开伪服务器和X11服务器的连接。
[0075] 本发明实现X11服务器和X11客户端连接的松耦合程度是X11服务器的运行状态对当前正在运行的X11客户端没有任何直接影响,从而关闭X11服务器端的窗口或者X11服务器自身,对伪服务器来说相当于断开和X11服务器的连接,不会影响X11客户端的运行;只有当X11服务器明确向伪服务器发出关闭X11客户端的命令时,X11客户端才会退出运行。
[0076] 本发明的实现X11服务器和X11客户端连接的方法具体实施方式流程如图3所示。
[0077] 步骤S301,启动伪服务器,打开两个socket(侦听套接字),分别侦听X11客户端的连接请求和X11服务器端的要求连接请求;当侦听到X11客户端的连接请求时,执行步骤S302,当侦听到X11服务器的要求连接请求时,执行步骤S303。
[0078] 步骤S302,该伪服务器作为一个X11服务器同该X11客户端建立连接;为该X11客户端分配客户端ID,执行步骤S304。
[0079] 步骤S303,该伪服务器作为一个X11客户端同所述X11服务器建立连接,将同该伪服务器连接的X11客户端的客户端ID发送给该X11服务器,以使该X11服务器从该伪服务器连接的X11客户端中选择要求连接的X11客户端,执行步骤S306。
[0080] 步骤S304,接收该X11客户端发送的资源生成指令,根据该资源生成指令在本地建立资源列表,记录资源的属性;该伪服务器在建立资源列表时,为该X11客户端的资源分配ID,并将分配的ID返回给该X11客户端。
[0081] 资 源 列 表 中 记 录 的 资 源 包 括:GC( 绘 图 上 下 文),Font( 字 体 ),WindowAttributes(窗口属性),Bitmap(比特图),Pixmap(像素图),Tile(瓦片图)和Stipple(点画图)。
[0082] 步骤S305,该伪服务器连接的X11服务器中是否有要求连接该X11客户端的X11服务器,如果有,执行步骤S306,否则,当接收到该X11客户端发送的绘图指令时,执行步骤S309,当接收到该X11客户端发送的资源属性设置指令时,执行步骤S310。
[0083] 步骤S306,该伪服务器向X11服务器发送资源生成指令,使该X11服务器生成其要求连接的X11客户端在该伪服务器中的资源列表的副本。
[0084] 该X11服务器在生成资源列表的副本时,为该副本中资源分配ID,并将该ID返回给该伪服务器;该伪服务器接收该ID。
[0085] 步骤S307,该伪服务器向X11客户端发送Expose事件,使X11客户端产生并发送重新绘制所有窗口指令。
[0086] 步骤S308,该伪服务器将该绘图指令转发给该X11服务器。
[0087] 步骤S309,该伪服务器将接收的绘图指令丢弃。
[0088] 步骤S310,该伪服务器解析资源属性设置指令,并根据解析资源属性设置指令修改该X11客户端在本地的资源列表和属性。
[0089] 本发明中,伪服务器对于X11服务器来说是一个X11客户端,对于X11客户端来说是一个X11服务器。
[0090] 伪服务器和X11客户端连接时,伪服务器作为一个X11服务器,实现操作包括分析X11客户端发送的请求数据包和向X11客户端发送应答、事件、错误数据包。
[0091] 伪服务器和X11服务器连接时,伪服务器作为一个客户端,实现操作包括:向X11服务器发送请求数据包和接收X11服务器的应答、事件、错误数据包。
[0092] 此外,由于X11中规定Colormap(颜色表),Graphical Context(绘图上下文),Font(字体),Window Attributes(窗口属性)和绘图有关的资源被保留在X11服务器端,因此,当断开伪服务器和X11服务器的连接后,该些保存在X11服务器端的资源将被该X11服务器回收,如果要在伪服务器和该X11服务器再次连接时利用它们,需要在该X11服务器端重新生成该些资源。
[0093] 因此,本发明中伪服务器建立X11客户端对应的资源列表,将资源保存起来,当伪服务器和X11服务器连接时,伪服务器通过向该X11服务器发送生成资源的指令,使X11服务器生成一份资源列表的副本,从而保证X11客户端对资源的属性设定将与X11服务器中的一致。
[0094] 在上述方法中X11客户端和X11服务器都是已经存在的各种系统,实现本发明方法不需对现存的各种X11应用程序和现存的X11服务器作任何改变,因而可以使基于本发明提出的方法实现的系统被尽可能多使用。本发明提出的方法只需要实现图1中的伪服务器系统,在系统中分别为X11客户端和X11服务器提供X11标准规定的接口,以使任何依据X11标准实现的应用程序和X11服务器都可以利用该伪服务器提供的功能。
[0095] 本发明的实现X11服务器和X11客户端连接的方法中伪服务器转发具体实施方式流程如图4所示。
[0096] 步骤S411,伪服务器接收X11客户端发送的指令,解析该指令。
[0097] 如果为资源属性设置指令,解析资源属性设置指令。
[0098] 如果为绘图指令,如果伪服务器已同要求连接所述X11的客户端的X11服务器连接,则解析该绘图指令,否则,丢弃该绘图指令。
[0099] 步骤S412,伪服务器处理接收的指令。
[0100] 如果指令为资源属性设置指令,提取维护资源列表所需的资源属性设置指令,根据该资源属性设置指令修改该X11客户端在该伪服务器中的资源列表。
[0101] 如果指令为绘图指令,则改变指令中的地址信息(DISPLAY)为X11服务器的对应地址,并改变窗口的ID、GC的ID、各种位图的ID为X11服务器为该X11客户端的资源分配的ID。
[0102] 步骤S413,将指令重新打包,发送给要求连接该X11客户端的X11服务器。
[0103] 步骤S421,伪服务器接收X11服务器发送的应答指令,解析该指令。
[0104] 解析X11服务器发送来的各种事件,比如窗口最大化。
[0105] 步骤S422,伪服务器修改应答指令中标识目的X11客户端的参数。
[0106] 根据解析结果,对应答指令改变指令中的地址信息(DISPLAY)为X11客户端对应的地址;改变窗口的ID、GC的ID、各种位图的ID为该伪服务器为该X11客户端的资源分配的ID。
[0107] 步骤S423,将应答指令重新打包,发送给该X11服务器要求连接的X11客户端。
[0108] 本发明方法的一个具体实施例如下所述。
[0109] 伪服务器打开两个socket,分别侦听X11客户端发送的连接请求和X11服务器发送的要求连接的请求。
[0110] 对于X11服务器的要求连接请求,伪服务器向该X11服务器发送连接请求以建立连接;同该X11服务器建立连接后,伪服务器把已连接在伪服务器上的所有X11客户端的客户端ID发送给X11服务器,使X11服务器从中选择要求连接的X11客户端;如果此时该X11服务器要求连接的X11客户端还没有启动,则该X11服务器不会进行绘制,直到指定的X11客户端启动为止;如果该X11服务器要求连接的X11客户端已启动,则伪服务器把被选择的X11客户端在伪服务器里保存的对应的资源通过发送请求的方式要求X11服务器生成一份副本;伪服务器向X11客户端发送一个Expose事件,使X11客户端重新发送绘图指令;伪服务器将该些绘图指令经过修改后转发给该X11服务器,从而使X11服务器按照伪服务器发来的绘图指令绘制图形。
[0111] 对于X11客户端的连接请求,伪服务器接受连接后,为该X11客户端分配一个本地ID;按照该X11客户端对资源的设置要求在本地生成一份资源列表,如果要求和该X11客户端连接的X11服务器已经和伪服务器建立了连接,则将该资源列表中的资源在X11服务器上也生成一份;伪服务器将X11客户端的绘图指令转发给X11服务器;如果没有X11服务器要求和该X11客户端连接,则伪服务器将该X11客户端发送来的绘图指令丢弃。
[0112] 伪服务器同X11客户端和X11服务器建立完连接后,在X11客户端间X11服务器转换数据包。
[0113] 本发明的实现X11客户端和X11服务器连接的系统结构如图5所示。所述系统为伪服务器,所述伪服务器包括:侦听模块501、建立客户端连接模块502、建立服务器连接模块503、转发模块504。
[0114] 侦听模块501,用于侦听X11客户端发送的连接请求和X11服务器端发送的要求连接请求。
[0115] 建立客户端连接模块502,用于当侦听模块501侦听到X11客户端的连接请求时,使所述伪服务器作为一个X11服务器同所述X11客户端建立连接。
[0116] 建立客户端连接模块502还用于接收所述X11客户端发送的资源生成指令,根据所述资源生成指令在所述伪服务器建立用于记录资源的属性的资源列表;并向所述伪服务器连接的X11服务器中要求同所述X11客户端连接的X11服务器发送资源生成指令,使所述X11服务器生成所述资源列表的副本。
[0117] 建立客户端连接模块502还用于在建立所述资源列表时,为所述资源列表中的资源分配ID,并将分配的ID返回给所述X11客户端。
[0118] 建立客户端连接模块502还用于同所述X11客户端建立完连接后,为所述客户端分配客户端标识。
[0119] 建立服务器连接模块503,用于当所述侦听模块501侦听到X11服务器的要求连接请求时,使所述伪服务器作为一个X11客户端同所述X11服务器建立连接。
[0120] 建立服务器连接模块503还用于在连接的所述X11服务器要求连接的X11客户端已启动并已同所述伪服务器连接时,向所述X11服务器发送资源生成指令,使所述X11服务器生成所述X11客户端在所述伪服务器中的资源列表的副本。
[0121] 所述X11服务器在生成所述资源列表的副本时,为所述副本中资源分配ID,并将所述ID返回给所述伪服务器。
[0122] 建立服务器连接模块503还用于接收所述X11服务器返回的所述ID。
[0123] 建立服务器连接模块503还用于在所述X11服务器要求连接的X11客户端已经同所述伪服务器连接时,向所述X11客户端发送expose事件,以使所述X11客户端发送绘图指令;接收到所述X11客户端发送的绘图指令后,将所述绘图指令转发给所述X11服务器。
[0124] 建立服务器连接模块503还用于同所述X11服务器建立完连接后,将同所述伪服务器连接的X11客户端的客户端标识发送给所述X11服务器,以使所述X11服务器从同所述伪服务器连接的X11客户端中选择要求连接的X11客户端。
[0125] 转发模块504,用于在连接的X11客户端和X11服务器间转发数据包。
[0126] 转发模块504进一步用于接收连接的X11客户端发送的资源属性设置指令,解析所述资源属性设置指令;提取维护资源列表所需的资源属性设置指令,根据所述资源属性设置指令修改所述X11客户端在所述伪服务器中的资源列表,将所述资源属性设置指令发送给要求同所述X11客户端连接的X11服务器,使伪服务器端的资源属性和X11服务器端的资源属性保持一致。
[0127] 转发模块504进一步用于接收连接的X11客户端发送的绘图指令,如果所述伪服务器已同要求连接所述X11客户端的X11服务器连接,则解析所述绘图指令,修改所述绘图指令中地址信息为所述X11服务器对应地址,修改所述绘图指令中资源的ID为所述X11服务器为所述资源分配的ID,将所述绘图指令发送给所述X11服务器,否则,丢弃所述绘图指令。
[0128] 转发模块504进一步用于接收连接的X11服务器发送的应答指令,解析所述应答指令,修改所述应答指令中地址信息为所述X11服务器要求连接的X11客户端对应地址,修改所述应答指令中资源的ID为所述伪服务器为所述X11客户端的资源分配的ID,将所述应答指令发送给所述X11客户端。
[0129] 本领域的技术人员在不脱离权利要求书确定的本发明的精神和范围的条件下,还可以对以上内容进行各种各样的修改。因此本发明的范围并不仅限于以上的说明,而是由权利要求书的范围来确定的。