L2002211155_黄爱玲_基于linux的远程控制技术客户端的实现_第1页
L2002211155_黄爱玲_基于linux的远程控制技术客户端的实现_第2页
L2002211155_黄爱玲_基于linux的远程控制技术客户端的实现_第3页
L2002211155_黄爱玲_基于linux的远程控制技术客户端的实现_第4页
L2002211155_黄爱玲_基于linux的远程控制技术客户端的实现_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

分类号 分类号 TP311 52TP311 52 U U D D C C D10621 408 2007 D10621 408 2007 5810 05810 0 密密 级 公级 公 开开 编编 号 号 20022111552002211155 成成 都都 信信 息息 工工 程程 学学 院院 学学 位位 论论 文文 基于基于 LinuxLinux 的远程控制技术客户端的实现的远程控制技术客户端的实现 论文作者姓名 论文作者姓名 黄爱玲黄爱玲 申请学位专业 申请学位专业 网络工程网络工程 申请学位类别 申请学位类别 工学学士工学学士 指指导导教教师师姓姓名名 职职称称 方睿 副教授 方睿 副教授 论文提交日期 论文提交日期 20072007 年年 0606 月月 0101 日日 基于基于 LinuxLinux 的远程控制技术客户端的实现的远程控制技术客户端的实现 摘摘 要要 远程控制技术在现代社会有着越来越广泛的应用 其涉及到远程监控 移 动办公 远程处理 远程教育等领域 论文主要介绍了在 Linux 平台中如何实 现远程控制 该软件主要包括客户端的应用程序和服务器端的应用程序 论文 重点介绍了远程控制软件客户端的需求分析 原理和设计过程 结合功能结构 图和设计流程图对软件的设计进行了详细的说明 该软件基于 C S 模式 通过 启动服务器端 启动客户端连接 输入正确的服务器地址和密码 实现控制远 端计算机的操作 关键词 关键词 远程控制 客户端 Linux The Client Terminal Implementation of Remote Control Technology based on Linux Abstract Nowadays the remote control technology is used widely it involves remote monitoring telecommuting teleprocessing distance learning and so on Thesis introduces how to achieve remote control on the Linux platform This software includes the applications procedures of client terminal and the applications procedures of server terminal It introduces the requirements analysis principle and the process of design to client terminal of remote control mainly Use the function chart and the flow chart to explain the detail of software This software is based on the C S pattern When both of the client terminal and the server terminal start to run and then input the IP address of server and password now you can control the remote computer Keywords Remote control The client terminal Linux 目目 录录 论文总页数 22 页 1引言 1 2概述 1 2 1远程控制技术简述 1 2 2远程控制技术的作用 1 2 3远程控制技术的应用现状及发展趋势 2 2 4远程控制软件的相关技术 2 3远程控制软件的设计 3 3 1需求分析 3 3 1 1客户端和服务器端的连接通信 3 3 1 2客户端对服务器端实现屏幕控制 4 3 2远程控制软件的总体设计 4 3 2 1远程控制软件的通信流程 4 3 2 2远程连接通信 5 3 3远程控制软件客户端的实现 5 3 3 1客户端总体代码 6 3 3 2客户端和服务器端的连接通信 6 3 3 3客户端对服务器端的屏幕控制 11 4远程控制软件客户端的测试 17 5远程控制软件的总体评价 19 结 论 20 参考文献 20 致 谢 21 声 明 22 第 1 页 共 22 页 1 1引言引言 随着计算机网络的出现 远程控制已经不再陌生 不管在工作或学习中都 有很强的实用性 可以使人们的生活变得更加轻松简单 然而大多数的远程控 制都是基于微软 Windows 操作系统 那么在 Linux 平台中是否也能实现远程控 制呢 远程控制软件基本上是由两部分组成 一部分是客户端的应用程序 vncviewer 另一部分是服务器端的应用程序 vncserver 本论文主要讨论了基 于 Linux 下的远程控制技术客户端的应用程序 vncviewer 的原理和开发过程 远程控制软件的应用程序在 UNIX 和 Linux 操作系统中适应性很强 操作过程和 显示方式比较直观方便 随着计算机网络的飞速发展 全球信息化已经成为人 类发展的趋势 远程控制也将提高人们的工作效率 实现信息和资源共享 所 以 对于远程控制技术的研究具有很深远的意义 2 2概述概述 2 12 1 远程控制技术简述远程控制技术简述 远程控制是指通过计算机网络 对分布在网络上的计算机实现远程控制 协同工作 这种控制是通过对基于网络通讯的标准通讯协议和对目标机的操作 系统响应方式的准确控制来实现的 远程控制技术是一个涉及到操作系统原理 网络技术 通信技术 网络安全技术等多种科学领域的新的计算机应用与研究 方向 远程控制技术是基于一定的物理网络 如 internet 网 企业或校园的局域 网等 通过一定的网络协议 如 TCP IP 协议 实现对远程计算机的远行方 式的控制 通过远程控制软件 可以实现在远程计算机上按控制软件的要求来 运行程序 终止程序 同步时间 注销用户 修改设置等各种操作 也可以在 本地实现自动跟踪远端计算机的屏幕变化 记录各种口令信息 获取系统信息 限制系统功能 任意操作文件及注册表 远程关机 发送信息等多种监控功能 就如同用户亲自坐在被控制端操作一样 可以执行被控制端的应用程序 以及 使用被控制端的系统资源 2 22 2 远程控制技术的作用远程控制技术的作用 1 远程办公 通过远程控制功能我们可以轻松的实现远程办公 这种远程的办公方式新 颖 轻松 从某方面来说可以提高员工的工作效率和工作兴趣 2 远程技术支持 远距离的技术支持必须依赖技术人员和用户之间的电话交流来进行 这种 交流即耗时又容易出错 但是有了远程控制技术 技术人员就可以远程控制用 第 2 页 共 22 页 户电脑 就像直接操作本地电脑一样 只需要用户的简单帮助就可以得到该计 算机存在的问题的第一手资料 很快就可以找到问题的所在 并加以解决 3 远程交流 利用远程技术 商业公司可以实现和用户的远程交流 采用交互式的教学 模式 通过实际操作来培训用户 使用户从技术人员那里学习示例知识变得非 常容易 而教师和学生之间也可以利用这种远程控制技术实现教学问题的交流 学生可以不用见到老师 就得到老师手把手的辅导和讲授 学生还可以直接在 电脑中进行习题的演算和求解 在此过程中 教师能够轻松看到学生的解题思 路和步骤 并加以指导 4 远程维护和管理 网络管理员或者普通用户可以通过远程控制技术为远端的电脑安装和配置 软件 下载并安装软件修补程序 配置应用程序和进行系统软件设置 2 32 3 远程控制技术的应用现状及发展趋势远程控制技术的应用现状及发展趋势 就目前状况来说 远程控制工具软件在微软 Windows 操作系统中非常多 这些远程控制工具软件都可以通过网络来控制特定的计算机 共享那台计算机 的数据资料 操作其外部设备 而在 Linux 操作系统中也是存在几款功能强大 的远程控制工具软件 只是这些软件非常少 使用的用户也不是很多 随着网络技术和通信技术的发展 远程控制技术也将得到迅速的发展和广 泛的应用 那么 Linux 平台中的远程控制技术的发展前景更是备受关注的 2 42 4 远程控制软件的相关技术远程控制软件的相关技术 Linux 操作系统的运用越来越广泛 是真正的多用户 多任务操作系统 他继承了 UNIX 系统的主要特征 具有强大的信息处理能力 特别在 Internet 和 Internet 的应用中占有很明显的优势 Linux 是公认的安全的操作系统 因为它的内核是可见的 它的源代码是 公开的可以由任何对它进行操作的人进行修改 所以许多企业的网络服务器都 首选 Linux 操作系统 远程控制系统的首要目的就是要远程接入一个安装有 Linux 操作系统的机 器中 如何在远程计算机的安全机制允许下合法或者非法接入远程计算机是远 程控制系统的基本问题 Unix 是计算机使用的主流操作系统之一 TCP IP 是广为应用的互连网协议 Unix 为 TCP IP 网络编程提供了一种网络进程通信机制 套接字接口 Socket Interface 面向连接协议的字节流套接字 TCP 与无连接协议的数据报套接字 UDP 不论何种套接字编程均采用 C S 客户机 服务器 的协作模式 即由客户 进程向服务器进程发出请求 服务器进程执行被请求的任务并将结果返回给客户 第 3 页 共 22 页 进程 3 3远程控制软件的设计远程控制软件的设计 3 13 1 需求分析需求分析 需求分析是软件设计的最重要的一步 包括对问题的识别 分析与综合等 由于网络的迅速发展 远程办公 远程教育已经不是什么困难的事了 利用远 程控制软件就可以很轻松的实现 通过分析 GNU 公共软件 VNC Virtual Network Computing 的设计原理和开发过程 结合实际的需求开发了这个系统 并命名为 tightVNC 要做一个基于 Linux 下的远程控制软件 该软件能够实现对远端计算机的 控制 经过分析 远程控制软件需要提供一个基于 C S 即客户端 服务器端 模式用户接口 用户能够通过自己的电脑控制远端的计算机 并能够利用自己 的鼠标和键盘直接对远端的桌面进行控制 实现远程桌面的控制 屏幕控制 对文件的查看和修改等功能 使用这样的 C S 模式 用户只需启动客户端连接 输入正确的服务器地址和密码 当服务器接收并验证后 将桌面图形发送到客 户端 让客户端看到远程桌面并控制它 服务器作为后台 它要响应客户的要求 客户发出的一切命令都要得到服 务器的响应 它允许一个用户来管理本地电脑上的桌面项目 允许客户动态的 添加和删除 并能将屏幕 鼠标和键盘的变化发送到客户端 远程控制软件的 整体设计模块如图 1 所示 RFB协议缓存模块 安全连接模块连接通信模块 屏幕显示模块 远程命令行模块 远程桌面模块 密码验证模块 服务器端客户端 图 1 总体设计模块 3 1 13 1 1 客户端和服务器端的连接通信客户端和服务器端的连接通信 我们想要拥有一个安全的连接方式 保证数据在通信过程中完整 不丢失 那么对于客户端与服务器端的通信连接 我们可以采用面向连接协议的字节流 套接字 TCP 来实现 如图 2 所示 服务器端客户端 TCP套接字连接通信 图 2 连接通信 第 4 页 共 22 页 3 1 23 1 2 客户端对服务器端实现屏幕控制客户端对服务器端实现屏幕控制 要实现客户端对服务器端的屏幕控制 需要一个很好的方法来处理远程图 形 这里我们选择了 RFB 协议 RFB 协议很好的处理了远程桌面图形在本地电 脑的显示 RFB 协议有三个阶段 如图 3 所示 握手阶段 初始化阶段 自由 通信阶段 RFB协议初始化阶段 自由通信阶段 握手阶段 图 3 RFB 协议的实现过程 3 23 2 远程控制软件的总体设计远程控制软件的总体设计 远程控制技术是实现远程办公 远程交流 远程控制和管理等功能的软件 它由两个部分组成 一部分是客户端的应用程序 vncviewer 另一部分是服务 器端的应用程序 vncserver 3 2 13 2 1 远程控制软件的通信流程远程控制软件的通信流程 远程控制软件的通信流程 如图 4 所示 1 客户端通过 VNC Viewer 连接至 VNC Server 2 VNC Server 返回信息给客户端 要求输入服务器地址和连接密码 3 在客户端输入连接密码后 VNC Server 验证客户端是否具有存取权限 4 若是客户端通过 VNC Server 的验证 客户端即要求 VNC Server 显示 桌面环境 5 VNC Server 通过 X Protocol 要求 X Server 将画面显示控制权交给 VNC Server 负责 6 VNC Server 将来由 X Server 的桌面环境利用通信协议送至客户端 并 且允许客户端控制 VNC Server 的桌面环境及输入装置 第 5 页 共 22 页 客户端 显示远程 桌面 验证 输入服务器地址 和密码 服务器 连接到服务器 返回信息给客户端 图 4 远程控制软件的通信流程图 3 2 23 2 2 远程连接通信远程连接通信 该设计采用 C S 模式 采用 TCP 协议实现客户端与服务器端的数据交换 通信过程如图 5 所示 Server 端侦听相连的协议端口 在收到 Client 端程序 的连接请求后动态分配一个 socket 控件 在 Server 和 Client 程序之间建立连 接 无论哪一端通过 Senddata 发送数据 都可以在对端激发 DataArrival 事件 接收数据 这样就实现了两端的数据交换 Listen Accept Senddata Getdata Close unload connect Getdata Senddata Close unload serverclient server 开始侦听 建立实际连接 发送数据 接收数据 关闭连接 发送连接请求 接收数据 发送数据 关闭连接 图 5 Client Server 连接建立步骤 3 33 3 远程控制软件客户端的远程控制软件客户端的实现实现 远程控制软件是一个远程桌面控制的开源软件 客户端要求很直观的控制 远程电脑的桌面 并利用鼠标和键盘直接控制远端电脑 其功能的实现过程是 首先通过客户端连接到运行的服务器端 键盘和鼠标动作被发送到服务器端 然后将服务器端的桌面压缩 通过 RFB 协议发送到客户端 最终实现控制远程 电脑的操作 第 6 页 共 22 页 3 3 13 3 1 客户端总体代码客户端总体代码 分析了下客户端部分代码 vncviewer 下的文件很多 我们可以按照它们 各自的功能做以下划分 如表 1 表 1 vncviewer 功能划分表 其客户 端的主要 功能模块 结构如下 Kernel 下的文件的工作主要是连接到 vncserver 启动 TCP 连接到 vncserver 告诉服务器端 哪种像素格式和编码是需要的 以便找到最佳的像 素格式和编码 达到远程控制桌面的最佳效果 GUI 下的文件主要的工作是处理色彩 即 rfd 像素格式 X 虚拟和颜色 光标的更新 桌面窗口 全屏模式 处理缓冲区等 Misc 下的文件主要的工作是更好的完善对远程桌面图形的控制 Network 下的文件的主要工作是创建 TCP 套接字 连接到服务器端 利用 RFB 协议处理屏幕显示功能 Encoding 下的文件的主要工作是提供编码 它为远程桌面提供了很好的压 缩方法 也为客户端提供最合适的远程桌面图形 3 3 23 3 2 客户端和服务器端的连接通信客户端和服务器端的连接通信 远程控制软件的客户端与服务器端的通信采用 TCP 协议 TCP 协议是一种 可靠的面向连接的传送服务 TCP 套接字可以实现基于 TCP IP 协议 面向连接 的通信模式 字节流套接字 TCP 的服务进程和客户进程在通信前必须建立连接 建立连接及通信的步骤见图 6 所示 Kernel vncviewer c desktop c GUI colour c cursur c dialogs c fullscreen c popup c selection c shm c tunnel c argsersources c Miscmisc c Networksockets c rfbproto c listen c Encodingree c corre c hextile c zlib c tight c caps c 第 7 页 共 22 页 TCP服务器 Close Read Write Connet Socket TCP客户 Close Read Write Read Accept Listen Bind Socket 阻塞直到接收到客户 连接请求 处理服务请求 协调连接 数据 请求 数据 响应 结束连接 图 6 面向连接协议的字节流套接字 TCP 1 服务进程首先调用 Socket 创建一个字节流套接字 并调用 Bind 将服 务器地址捆扎在该套接字上 接着调用 Listen 监听连接请求 随后调 用 Accept 做好与客户进程建立连接的准备 无连接请求时 服务进程 被阻塞 2 客户进程调用 Socket 创建字节流套接字 然后调用 Connect 向服务 进程发出连接请求 3 当连接请求到来后 服务进程被唤醒 生成一个新的字节流套接字 并用 新的套接字同客户进程的套接字建立连接 而服务进程最早生成的套接字则继续 用于监听网络上的服务请求 4 服务进程和客户进程通过调用 Read 和 Write 交换数据 5 服务进程和客户进程通过调用 Close 撤消套接字并中断连接 VNC Client 通过 TCP 套接字来实现与 VNC Server 的通信连接 无论是服 第 8 页 共 22 页 务器还是客户 都必须首先产生其 TCP 通信传输端点 即 TCP 套接字 应用程 序通过调用 socket 产生套接字 该函数调用必须给出所使用的地址簇 套 接字类型和协议标志 该函数返回一个套接字描述符 之后产生的所有 I O 操 作都是作用于该套接字描述符 其数据结构包括一个网络连接的 5 种信息 通 信协议 本地协议地址 本机主机端口 远程主机地址和远程协议端口 主要 函数意义如表 2 表 2 主要函数意义 connetToTcpAddr 连接 TCP 地址 FindFreeTcpport 找到 TCP 端口 ListenAtTcpport 监听 TCP 端口 AcceptTcpport 接受 TCP 连接 StringToIpAddr 字节流地址 其主要代码如下 Int 连接 TCP 地址 ConnectToTcpAddr unsigned int host int port int sock 存储地址和端口信息 struct sockaddr in addr int one 1 addr sin family AF INET addr sin port htons port addr sin addr s addr host Sock socket AF INET SOCK STREAM 0 If sock 0 fprintf stderr programName perror ConnectToTcpAddr socket Return 1 If connect sock struct sockaddr perror ConnectToTcpAddr connect Close sock Return 1 If setsockopt sock IPPROTO TCP TCP NODELAY Char perror ConnectToTcpAddr setsockopt Close sock Return 1 第 9 页 共 22 页 Return sock int 找到 TCP 端口 FindFreeTcpPort void int sock port struct sockaddr in addr addr sin family AF INET addr sin addr s addr INADDR ANY Sock socket AF INET SOCK STREAM 0 If sock TUNNEL PORT OFFSET port addr sin port htons unsigned short port If bind sock struct sockaddr Return port Close sock Return 0 int 监听 TCP 端口 ListenAtTcpPort int port int sock struct sockaddr in addr int one 1 addr sin family AF INET addr sin port htons port addr sin addr s addr INADDR ANY Sock socket AF INET SOCK STREAM 0 If sock 0 fprintf stderr programName perror ListenAtTcpPort socket Return 1 If setsockopt sock SOL SOCKET SO REUSEADDR Const char perror ListenAtTcpPort setsockopt Close sock Return 1 第 10 页 共 22 页 If bind sock struct sockaddr perror ListenAtTcpPort bind Close sock Return 1 If listen sock 5 0 fprintf stderr programName perror ListenAtTcpPort listen Close sock Return 1 Return sock int 接受 TCP 连接 AcceptTcpConnection int listenSock int sock struct sockaddr in addr int addrlen sizeof addr int one 1 Sock accept listenSock struct sockaddr If sock 0 fprintf stderr programName perror AcceptTcpConnection accept Return 1 If setsockopt sock IPPROTO TCP TCP NODELAY Char Return True Return False 3 3 33 3 3 客户端对服务器端的屏幕控制客户端对服务器端的屏幕控制 客户端实现的屏幕控制原理 1 屏幕控制 VNC 是把被控制端的屏幕做成图像 经过压缩后传送到控制端 控制端的 控制信息 如鼠标信息 传送到被控制端后进入消息队列 如图 7 所示 客户端 Vnc viewer 应用程序 Vnc serverapplications X服务器 vnc protocal 图 7 屏幕控制流程 其控制是基于 TCP IP 的 VNC 协议是基于 RFB 协议的 RFB remote frame buffer 是一个定义远程图形用户终端接口的简单协议 因为它是以 frame buffer 级别的工作方式 实用于所有的窗口系统 用户所操作的远程终 端 包括一个显示器 键盘和鼠标等 被称为 RFB 客户端 远程终端所引起的 frame buffer 变化可以通知到 RFB 服务器 2 截屏方式 VNC 使用的截屏方式有两种 一种是使用自动报告需要截屏的区域 第二 种是某个区域截屏后使用某种压缩算法压缩后发送 3 传输方式 RFB 协议传输 在控制端不能直接改变显示大小 只能进行缩放 如缩放 为原大小的几倍 原理是在远程机器上运行一个额外的 X 服务器 X 服务器和 客户机器都在远程 然后通过 RFB 协议用自己的客户端显示到本地 VNC Client 通过 TCP IP 上的 VNC 协议与 VNC Server 沟通 通过认证后 把桌面环境 输入设备和 X 资源交给 VNC Server 掌控 VNC Server 再将桌面 环境通过 VNC 协议送给 VNC Client 端 让 VNC Client 来操纵 VNC Server 桌面 第 12 页 共 22 页 环境和输入设备 因此 RFB 协议包中的文件就比较多 实现的功能也比较复 杂 包括连接的实现 消息的读取和识别验证 编码和进制的常量声明 用户 密码等 RFB 协议分为三个阶段 a 握手阶段 协商安全机制 其主要代码如下 static int 选择安全连接类型 SelectSecurityType void CARD8 nSecTypes Char secTypeNames None VncAuth CARD8 knownSecTypes rfbSecTypeNone rfbSecTypeVncAuth int nKnownSecTypes sizeof knownSecTypes CARD8 secTypes CARD8 secType rfbSecTypeInvalid int i j If ReadFromRFBServer char If nSecTypes 0 ReadConnFailedReason Return rfbSecTypeInvalid b 初始化阶段 客户端发送 ClientInit 服务端桌面的共享方式 服务端发送 ServerInit 的应 答 发送自己 FramBuffer 的宽 高 发送像素的表示格式 像素表示是真彩色 表示法 发送客户端分配的名字的长度 其主要代码如下 Bool 客户端发送 ClientInit InitialiseRFBConnection void int server major server minor rfbClientInitMsg ci int secType If listenSpecified errorMessageOnReadFailure False InitCapabilities If SetupTunneling Return False If PerformAuthenticationTight Return False Break ci shared appData shareDesktop 1 0 If WriteExact rfbsock char 第 13 页 共 22 页 If ReadFromRFBServer char 服务端发送 ServerInit 的应答 si framebufferWidth Swap16IfLE si framebufferWidth si framebufferHeight Swap16IfLE si framebufferHeight si format redMax Swap16IfLE si format redMax si format greenMax Swap16IfLE si format greenMax si format blueMax Swap16IfLE si format blueMax si nameLength Swap32IfLE si nameLength c 自由通信阶段 C S 通信类型有 SetRixelFormat 如果客户端不发送这个消息 则它们 之间用 ServerInit 时商定的像素格式 SetEncodings 如果客户端不进行编码 的设定 服务端用 raw encoding 方式传数据 FramebufferUpdateRequest 客 户端根据自己的能力不断的发送刷新请求 当服务器端屏幕有更新时 会把有 像素改变的区域回应给客户端 KeyEvent 发送密钥事件 PointerEvent 发 送指针事件 ClientCutText 发送客户文本等 通信阶段主要函数如表 3 表 3 通信阶段主要函数 SetRixelFormat 发送像素格式 SetEncodings 进行编码设定 FramebufferUpdateRequest 发送刷新请求 KeyEvent 发送密钥事件 PointerEvent 发送指针事件 ClientCutText 发送客户文本 其主要代码如下 Bool 发送像素格式 进行编码设定 SetFormatAndEncodings RfbSetPixelFormatMsg spf Char buf sz rfbSetEncodingsMsg MAX ENCODINGS 4 rfbSetEncodingsMsg se rfbSetEncodingsMsg buf CARD32 encs CARD32 int len 0 Bool requestCompressLevel False Bool requestQualityLevel False Bool requestLastRectEncoding False spf type rfbSetPixelFormat spf format myFormat spf format redMax Swap16IfLE spf format redMax spf format greenMax Swap16IfLE spf format greenMax spf format blueMax Swap16IfLE spf format blueMax 第 14 页 共 22 页 If WriteExact rfbsock char Se type rfbSetEncodings Se nEncodings 0 If appData encodingsString Char encStr appData encodingsString int encStrLen Do Char nextEncStr strchr encStr If nextEncStr encStrLen nextEncStr encStr nextEncStr else encStrLen strlen encStr if strncasecmp encStr raw encStrLen 0 encs se nEncodings Swap32IfLE rfbEncodingRaw else if strncasecmp encStr copyrect encStrLen 0 encs se nEncodings Swap32IfLE rfbEncodingCopyRect else if strncasecmp encStr tight encStrLen 0 encs se nEncodings Swap32IfLE rfbEncodingTight requestLastRectEncoding True If appDpressLevel 0 else if strncasecmp encStr zlib encStrLen 0 encs se nEncodings Swap32IfLE rfbEncodingZlib If appDpressLevel 0 else if strncasecmp encStr rre encStrLen 0 encs se nEncodings Swap32IfLE rfbEncodingRRE else fprintf stderr Unknown encoding s n encStrLen encStr encStr nextEncStr while encStr 第 15 页 共 22 页 If se nEncodings MAX ENCODINGS encs se nEncodings Swap32IfLE appData qualityLevel rfbEncodingQualityLevel0 If appData useRemoteCursor If se nEncodings nEncodings Swap32IfLE rfbEncodingXCursor If se nEncodings nEncodings Swap32IfLE rfbEncodingRichCursor If se nEncodings nEncodings Swap32IfLE rfbEncodingPointerPos If se nEncodings nEncodings Swap32IfLE rfbEncodingLastRect Else If SameMachine rfbsock If tunnelSpecified fprintf stderr Same machine preferring raw encoding n encs se nEncodings Swap32IfLE rfbEncodingRaw else fprintf stderr Tunneling active preferring tight encoding n encs se nEncodings Swap32IfLE rfbEncodingCopyRect encs se nEncodings Swap32IfLE rfbEncodingTight encs se nEncodings Swap32IfLE rfbEncodingHextile encs se nEncodings Swap32IfLE rfbEncodingZlib encs se nEncodings Swap32IfLE rfbEncodingCoRRE encs se nEncodings Swap32IfLE rfbEncodingRRE If appDpressLevel 0 else if tunnelSpecified encs se nEncodings Swap32IfLE rfbEncodingCompressLevel1 If appData enableJPEG If appData qualityLevel 9 appData qualityLevel 5 encs se nEncodings Swap32IfLE appData qualityLevel 第 16 页 共 22 页 rfbEncodingQualityLevel0 If appData useRemoteCursor encs se nEncodings Swap32IfLE rfbEncodingXCursor encs se nEncodings Swap32IfLE rfbEncodingRichCursor encs se nEncodings Swap32IfLE rfbEncodingPointerPos encs se nEncodings Swap32IfLE rfbEncodingLastRect len sz rfbSetEncodingsMsg se nEncodings 4 Se nEncodings Swap16IfLE se nEncodings If WriteExact rfbsock buf len return False Return True Bool 发送刷新请求 SendIncrementalFramebufferUpdateRequest Return SendFramebufferUpdateRequest 0 0 si framebufferWidth si framebufferHeight True Bool SendFramebufferUpdateRequest int x int y int w int h Bool incremental RfbFramebufferUpdateRequestMsg fur fur type rfbFramebufferUpdateRequest fur incremental incremental 1 0 1 表示区域刷新 0 表示请求全屏刷新 fur x Swap16IfLE x fur y Swap16IfLE y fur w Swap16IfLE w fur h Swap16IfLE h If WriteExact rfbsock char Return True Bool 发送指针事件 SendPointerEvent int x int y int buttonMask rfbPointerEventMsg pe pe type rfbPointerEvent pe buttonMask buttonMask If x 0 x 0 If y 0 y 0 If appData useX11Cursor SoftCursorMove x y pe x Swap16IfLE x pe y Swap16IfLE y 第 17 页 共 22 页 Return WriteExact rfbsock char Bool 发送密钥事件 SendKeyEvent CARD32 key Bool down rfbKeyEventMsg ke ke type rfbKeyEvent ke down down 1 0 1 表示释放 0 表示按下 ke key Swap32IfLE key Return WriteExact rfbsock char Bool 发送客户文本 SendClientCutText char str int len rfbClientCutTextMsg cct If serverCutText Free serverCutText serverCutText NULL cct type rfbClientCutText cct length Swap32IfLE len Return WriteExact rfbsock char 4 4远程控制软件远程控制软件客户端客户端的的测试测试 远程控制软件是一个典型的 C S 模式软件 VNC Server 要正常工作 则被 控制服务器端的操作系统和 TCP IP 协议必须能正常工作 具有能访问的 IP 地 址 其过程就是把整个图形控制台的帧缓存进行复制 并且把来自客户端的控 制输入返回给系统 再用 RFB 协议把帧缓存的内容传送到客户端进行显示 前面已经研究分析了远程控制软件的设计过程 客户端是否能连接到远程 桌面 实现远程控制呢 下面就来测试一下它的性能 首先打开一个新的终端 启动 vncserver 如图 8 所示 然后启动 vncviewer 如图 9 所示 在启动客户端后 只需输入远程控制的机器的 IP 地 址和访问密码 如图 10 所示 对方机器的桌面就出现在屏幕上了 如图 11 所 示 现在就可以很方便地控制远程电脑了 其过程如下 第 18 页 共 22 页 图 8 启动 vncserver 图 9 启动 vncviewer 连接 图 10 输入服务器地址和密码 第 19 页 共 22 页 图 11 连接到远程桌面 连接到远程桌面后 可以查看当前目录下的文件 显示当前系统的所有用 户名 所有终端名和注册系统的时间 远程控制桌面的默认窗口管理器是 X windows X windows 由两个部分组成 应用程序接口和窗口管理器 如图 12 所示 1 应用程序接口 这种接口控制应用程序的窗口运行过程以及在菜单 对话框中显示的内容 2 窗口管理器 它是独立的客户程序 其功能是控制窗口移动

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论