3.2.2 远程连接通信 该设计采用C/S模式,采用TCP协议实现客户端与服务器端的数据交换。通信过程如图5所示:Server端侦听相连的协议端口,在收到Client端程序的连接请求后动态分配一个socket控件,在Server和Client程序之间建立连接,无论哪一端通过Senddata发送数据,都可以在对端激发DataArrival事件接收数据,这样就实现了两端的数据交换。 copyright paper51.com 内容来自论文无忧网 www.paper51.com 图5 Client/Server连接建立步骤 http://www.paper51.com 3.3 远程控制软件客户端的实现 内容来自www.paper51.com 远程控制软件是一个远程桌面控制的开源软件,客户端要求很直观的控制远程电脑的桌面,并利用鼠标和键盘直接控制远端电脑。其功能的实现过程是:首先通过客户端连接到运行的服务器端,键盘和鼠标动作被发送到服务器端,然后将服务器端的桌面压缩,通过RFB协议发送到客户端。最终实现控制远程电脑的操作。 内容来自论文无忧网 www.paper51.com 3.3.1 客户端总体代码 copyright paper51.com
分析了下客户端部分代码,vncviewer下的文件很多,我们可以按照它们各自的功能做以下划分,如表1: 内容来自www.paper51.com 表1 vncviewer功能划分表 内容来自www.paper51.com Kernel 内容来自论文无忧网 www.paper51.com
vncviewer.c desktop.c 内容来自www.paper51.com GUI http://www.paper51.com colour.c cursur.c dialogs.c fullscreen.c popup.c selection.c shm.c tunnel.c argsersources.c 内容来自www.paper51.com Misc 内容来自www.paper51.com misc.c 内容来自论文无忧网 www.paper51.com Network 内容来自论文无忧网 www.paper51.com
sockets.c rfbproto.c listen.c http://www.paper51.com Encoding paper51.com ree.c corre.c hextile.c zlib.c tight.c caps.c copyright paper51.com 其客户端的主要功能模块结构如下: paper51.com Kernel下的文件的工作主要是连接到vncserver,启动TCP连接到vncserver,告诉服务器端,哪种像素格式和编码是需要的。以便找到最佳的像素格式和编码。达到远程控制桌面的最佳效果。 paper51.com GUI下的文件主要的工作是处理色彩(即rfd像素格式、X虚拟和颜色),光标的更新,桌面窗口,全屏模式,处理缓冲区等。 copyright paper51.com Misc下的文件主要的工作是更好的完善对远程桌面图形的控制。 内容来自论文无忧网 www.paper51.com
Network下的文件的主要工作是创建TCP套接字,连接到服务器端,利用RFB协议处理屏幕显示功能。 paper51.com Encoding下的文件的主要工作是提供编码,它为远程桌面提供了很好的压缩方法,也为客户端提供最合适的远程桌面图形。 paper51.com 3.3.2 客户端和服务器端的连接通信 http://www.paper51.com 远程控制软件的客户端与服务器端的通信采用TCP协议,TCP协议是一种可靠的面向连接的传送服务。TCP套接字可以实现基于TCP/IP协议、面向连接的通信模式。字节流套接字TCP的服务进程和客户进程在通信前必须建立连接,建立连接及通信的步骤见图6所示。 paper51.com
内容来自论文无忧网 www.paper51.com 图6面向连接协议的字节流套接字TCP paper51.com 1) 服务进程首先调用Socket()创建一个字节流套接字,并调用Bind()将服务器地址捆扎在该套接字上,接着调用Listen()监听连接请求,随后调用Accept()做好与客户进程建立连接的准备,无连接请求时,服务进程被阻塞。 内容来自论文无忧网 www.paper51.com 2) 客户进程调用Socket()创建字节流套接字,然后调用Connect()向服务进程发出连接请求。 copyright paper51.com 3) 当连接请求到来后,服务进程被唤醒,生成一个新的字节流套接字,并用新的套接字同客户进程的套接字建立连接,而服务进程最早生成的套接字则继续用于监听网络上的服务请求。 copyright paper51.com 4) 服务进程和客户进程通过调用Read()和Write()交换数据。 copyright paper51.com 5) 服务进程和客户进程通过调用Close()撤消套接字并中断连接。 paper51.com VNC Client通过TCP套接字来实现与VNC Server的通信连接。无论是服务器还是客户,都必须首先产生其TCP通信传输端点,即TCP套接字。应用程序通过调用socket()产生套接字。该函数调用必须给出所使用的地址簇、套接字类型和协议标志。该函数返回一个套接字描述符。之后产生的所有I/O操作都是作用于该套接字描述符。其数据结构包括一个网络连接的5种信息:通信协议、本地协议地址、本机主机端口、远程主机地址和远程协议端口。主要函数意义如表2。 内容来自www.paper51.com |