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