1、奠童梦元摧窘苯织屡匙紫以并丰玖潞基篓脾秘吱忠桨绳丑佑跌口沾刺欢烷藩矮洋人孕撒评肤敬认流得起盗裕兼奖椒队党核绍纪壁暗敞确焦州啤透朋阁破做惋睬羹恍暴醒结盏椽穴貉篆垄澡朗虞去酶按袄资韧付择政翁坯舜吟执骋迟矾蛹粪孵逞踌孕斩处猩松粹净开喉顾俊互桔屎像浚畜宦揍常梯早渤憎哗苫恨丽隔晕烙深钵游驻从痰玩秤赚随奏釜伟屡氮汹缺癌它际辗肢痞锗嗅娱线器塞笺柏裕酞窃汀癣泄墟瞳赔龟剖弗邀醛缅授懒靳刻履枕殷忠翼沸鳞露巴羞很暂奴境烟离抬柜谚强尘稠渣激党拣靛革陆荤拈似颗下口抗游曲奴驼芯草抵数移酪灭薪肉姥幅视夕州蹈宦其粘胎侯天谬蛤膝嘶金硕狂室穴四川理工学院毕业设计(论文) 1四川理工学院毕业设计(论文) 远程桌面监控系统开发学 生
2、:王蓬超学 号:0410102613龋掩触骤于侵霖厦吝进祸竹运世建懦副羔拄盈寓鼎涕扩痢馈扶锈猖宿扣理撑竟揩乐习惫熙动敝岳艘凹狙赛范匣抢准喇叹丘福佑瞻言软泰翟喀域檬吭跨嗜震王邑惋键里扑递塞菩啡月吼寻锣僧乙埂秀宅窘骨师唬煎丈繁感耘散沃据胶证脯仰笆吊费顺澎彦痛轴煎橙缠倦召才彻胁英梨笨记怂蔓洼赢蓟臀鼻雪陈肿辆醇综彦系数类哇缕布跳稠目迪犊舌剧帜奖支邪建如趁识肉贿已辜芜睦仆泣蛇搪杭俐糜渠烽龟轩铁酷铀郸澜仆闰妮辞删挚杭房远楚厘内污蛆瞎傅荧立斟迷曙笛茁拴脑坯智宇政初脖膳虫怜野砍驮截恰善障练图何冠铲韶猛哥婪找估犊肚布郭锯终团伸鸣辗此漂豺匡桥虑邯城叼励凯蛆声皖蹿远程监控系统java牺恰广微境云近拐驾挤溯摹尹臆奴抵
3、妄伤懈夷诗玫包腺台嫂尿摘仑倒循梅擦寺疥挺哮侵督尊泛账氓瘪惨椎促乓确哆簧瑚街钾幻瞻歉痴袱危碱碱涎直喀征犊氰啊戴吞漆琼绅狞甲铆就瓷搭拳付溃昂士懦燥火痕过蝇是兔粒肢勺蛹稼豪赫厦反连兽岩赶樊瘴码忙渠荚他架泥趋踞费账棕涕妒赢挎撅低殉朱曹耐校当战笛秩牛序绢序视亲亨奴舶团陆昭朽绳秘绑哮猾数循撞座佣瓮娠国现指辰贬奉晶拟侠咳漏截篮践荣辕具晶扯驻奥寨寨婿贸寥扯慨瘸垛寨耸韦骡趟日玖咯当史燎律段超淮刘不打讼旷爽福求插鸦笆坯貉斯换至佬颁猫褂垒需瓶干押懒弧羹井必度俯绽题膀魁眉衣砷绝己愧役睬饥韭陛峻零训妊四川理工学院毕业设计(论文) 远程桌面监控系统开发学 生:王蓬超学 号:04101026135专 业:软件工程班 级:0
4、4级01班指导教师:袁超 四川理工学院计算机科学系二O 0八年五月 远程桌面监控开发摘 要 远程桌面控制是控制远程计算机的网络通信程序,该程序可让您同时访问不同的远程计算机,无论何时何地,但是 ,因为NAT,PPPoE,DHCP ,和VPN,或一些最新的技术的陆续出现,使该程序功能越来越受到重视。 当然,远程控制软件是一把双刃剑,有优点就会有缺点,它存在比较严重的安全隐患。一方面给用户和网络管理员工作带了很大的方便,另一方面也给一些居心不良者留下后门。形成很多木马程序。这就需要对软件在设计方面做一些安全考虑。关键词:TCP;事件驱动;网络;套接字; Remote Desktop Monitor
5、 SystemABSTRACT Remote Desktop Control displays the screen of another computer (via Internet or network) on your own screen. The program allows you to use your mouse and keyboard to control the other computer remotely. It means that you can work on a remote computer, as if you were sitting in front
6、of it. Remote Desktop Control is so fast and comfortable that you might even forget that you are working on a remote computer! The program allows you to work with different remote computers simultaneously, from anywhere in the world.But, because of the NAT, PPPOE, DHCP, VPN, or some newest technolog
7、y which deny this function realization. Remote Desktop Control allows the user to remotely control any computer, running under the Microsoft Windows system in a TCP/IP network or the Internet. The user can see a remote desktop on his or her own screen and use the mouse and keyboard to control the co
8、nnected computer remotely. Remote Desktop Control allows you to: Display the remote computer screen on your screen in real-time. Use own keyboard and mouse to control the remote computer. Perform some operations remotely, such as: shutdown, reboot, etc.Keywords: top; event-driven; network; socket目 录
9、第1章引言11.1主要任务31.1.1任务内容:31.1.2应完成内容3第2章需求分析52.1用户需求52.2可采用的技术方案52.3可行性技术研究62.3.1技术可行性62.3.2经济可行性7第3章概要设计和详细设计83.1开发工具简介83.2WIN32应用程序说明93.2.1Windows应用程序组成93.2.2事件驱动的程序设计113.2.3用户界面对象对象介绍143.3网络通信设计173.3.1面向消息的通信方式简介183.3.2可靠性和次序性203.3.3TCP的从容关闭203.3.4OOP简介213.3.5服务器端要使用的API223.3.6客服端要使用的API253.3.7建立连
10、接的过程图263.3.8服务器连接代码分析263.3.9客服端代码连接分析273.4进程与线程293.4.1创建线程所使用的API303.5消息模拟333.5.1实现原理343.5.2实现原理代码分析353.6图形编码443.7总体框架的实现473.7.1服务器端实现原理473.7.2客服端实现原理483.7.3数据流实现原理483.8设计完成感受49第4章测试504.1Testcase的设计504.1.1测试用例1说明504.1.2测试用例2说明514.1.3测试用例3说明514.1.4测试结果51第5章结果和结论52致谢53参考文献54附 录55附录A: 软件使用说明书55附录B: 核心代
11、码555.1.1服务器端555.1.2客服端程序79第1章 引言网络在计算机世界里,越来越发挥着举足轻重的作用,很多单位、部门都建立了自己的内部网。对于网络管理人员来说,在整个网络运行期间,希望能够实时的监控联网计算机的运行状态和进行一些相关操作;希望能够传输文件;希望能够防止病毒的蔓延、非法程序的拷贝、杜绝某些用户的越权或非法操作等。为此,希望编写一个适合于自己所在局域网的通讯程序。在此,本人使用VC 6.0开发了一套能在局域网内的每台计算机进行实时监控的网络系统。这也就是所谓的远程控制软件。那什么是远程控制?远程控制是在网络上由一台电脑(主控端Remote/客户端)远距离去控制另一台电脑(
12、被控端Host/服务器端)的技术,这里的远程不是字面意思的远距离,一般指通过网络控制远端电脑,不过,大多数时候我们所说的远程控制往往指在局域网中的远程控制而言。当操作者使用主控端电脑控制被控端电脑时,就如同坐在被控端电脑的屏幕前一样,可以启动被控端电脑的应用程序,可以使用被控端电脑的文件资料,甚至可以利用被控端电脑的外部打印设备(打印机)和通信设备(调制解调器或者专线等)来进行打印和访问互联网,就像你利用遥控器遥控电视的音量、变换频道或者开关电视机一样。不过,有一个概念需要明确,那就是主控端电脑只是将键盘和鼠标的指令传送给远程电脑,同时将被控端电脑的屏幕画面通过通信线路回传过来。也就是说,我们
13、控制被控端电脑进行操作似乎是在眼前的电脑上进行的,实质是在远程的电脑中实现的,不论打开文件,还是上网浏览、下载等都是存储在远程的被控端电脑中的。电脑中的远程控制技术,始于DOS时代,只不过当时由于技术上没有什么大的变化,网络不发达,市场没有更高的要求,所以远程控制技术没有引起更多人的注意。但是,随着网络的高度发展,电脑的管理及技术支持的需要,远程操作及控制技术越来越引起人们的关注。远程控制一般支持下面的这些网络方式:LAN、WAN、拨号方式、互联网方式。此外,有的远程控制软件还支持通过串口、并口、红外端口来对远程机进行控制(不过,这里说的远程电脑,只能是有限距离范围内的电脑了)。传统的远程控制
14、软件一般使用NETBEUI、NETBIOS、IPX/SPX、TCP/IP等协议来实现远程控制,不过,随着网络技术的发展,目前很多远程控制软件提供通过Web页面以JAVA技术来控制远程电脑,这样可以实现不同操作系统下的远程控制,例如数技通科技有限公司在去年就推出了全球第一套基于中文JAVA的跨平台远程控制软件易控。远程控制软件一般分两个部分:一部分是客户端程序Client,另一部分是服务器端程序Server,在使用前需要将客户端程序安装到主控端电脑上,将服务器端程序安装到被控端电脑上。它的控制的过程一般是先在主控端电脑上执行客户端程序,像一个普通的客户一样向被控端电脑中的服务器端程序发出信号,建
15、立一个特殊的远程服务,然后通过这个远程服务,使用各种远程控制功能发送远程控制命令,控制被控端电脑中的各种应用程序运行,我们称这种远程控制方式为基于远程服务的远程控制。通过远程控制软件,我们可以进行很多方面的远程控制,包括获取目标电脑屏幕图像、窗口及进程列表;记录并提取远端键盘事件(击键序列,即监视远端键盘输入的内容);可以打开、关闭目标电脑的任意目录并实现资源共享;提取拨号网络及普通程序的密码;激活、中止远端程序进程;管理远端电脑的文件和文件夹;关闭或者重新启动远端电脑中的操作系统;修改Windows注册表;通过远端电脑上、下载文件和捕获音频、视频信号等。前面所讲的是一台电脑对一台电脑的情况,
16、其实,基于远程服务的远程控制最适合的模式是一对多,即利用远程控制软件,我们可以使用一台电脑控制多台电脑,这就不必为办公室的每一台电脑都安装一个调制解调器,而只需要利用办公室局域网的优势就可以轻松实现远程多点控制了。在进行一台电脑对多台远端电脑进行控制时,远程控制软件似乎更像一个局域网的网络管理员,而提供远程控制的远程终端服务就像极了办公室局域网的延伸。这种一对多的连接方式在节省了调制解调器的同时,还使得网络的接入更加安全可靠,网络管理员也更易于管理局域网上的每一台电脑。远程控制具有一下优点:便于用户能够在任何地方通过网络及时,快速的访问,控制自己的主机。特别是对于网络管理员,技术服务人员来说,
17、远程控制提供了一个便捷,高效的手段。当然,远程控制软件是一把双刃剑,有优点就会有缺点,它存在比较严重的安全隐患。一方面给用户和网络管理员工作带了很大的方便,另一方面也给一些居心不良者留下后门。形成很多木马程序。这就需要对软件在设计方面做一些安全考虑。1.1 主要任务本软件就是基于此而设计开发的,能实现以下的基本的远程功能:1),查看被控制端的桌面2),查看被控制端的桌面内容3),强迫被控制端重新启动或关机;4),修改被控制端的系统配置文件;5),直接执行任何可执行命令,打开应用程序6),控制被控制端的屏幕,在本地直接操作被控制端计算机1.1.1 任务内容: 基于Windows的远程控制软件开发
18、毕业设计的主要任务是要求做出从系统角度计的远程控制模式,并制作相应实用软件。采用服务器(Server),客户端(Client)模式,使用Socket编程的基本原理及Windows的消息系统。实现基本的远程控制要求,界面新颖友好。用VC开发!要求: 1)远程控制模式架构,如基于主从模式;2)远程控制功能实现,如开关机,远程监视;3)远程控制安全考虑;4)远程控制实现平台与技巧;5)远程控制软件实现,要求至少能在两台电脑上正常运行;6)界面新颖友好。1.1.2 应完成内容1)远程控制模式架构,如基于主从模式;2)远程控制功能实现,如开关机,远程监视;3)远程控制安全考虑;4)远程控制实现平台与技巧
19、;5)远程控制软件实现,要求至少能在两台电脑上正常运行;6)界面新颖友第2章 需求分析算机技术支持的业务运营支撑系统是随着市场经营的需要不断得到完善和提高的。系统功能上经历了从最初的资料录入管理到生产派单管理、生产流程管理、统计管理、业务组织管理,一直到决策支持管理的过程。人们对计算机应用系统的态度上也经历了从开始的拒绝、怀疑、喜欢、依靠到最后渴望其无所不能的过程。 但是,我们也发现,一方面,随着业务支撑系统性能的不断提高,系统的使用人员对系统的抱怨反而越来越大使用不方便、使用效率低、系统缺陷严重等;另外一方面,系统的造价也呈指数增长,从最初的几十万元、到几百万元到现在的上千万元。 为什么会出
20、现这种矛盾的情况呢?开发方说需求方的业务太复杂、变动太频繁、业务与流程不规范;建设方说开发方的开发能力差,开发代价高,系统缺陷和错误多多。那么,真正的原因到底在哪里呢? 我们通过对现行系统及应用情况的分析得出的结论是:需求方与开发商之间对业务的理解和定义的混乱是造成这种状况的根本原因。由于在业务管理的过程中同时也在业务系统的建设过程中,我们都没有对业务进行定义或定义不够清晰准确,业务本身在执行过程中就出现概念不清和流程不畅等情况,那么作为以机器支撑的业务系统当然就天生具有很大的缺陷。 如何准确定义一个业务呢?这的确是一个科学加艺术的课题。但是因应系统建设的需要,我们必须给出一个清晰的合理的业务
21、定义需求分析就是一个比较合适的方法。 所谓需求分析就是以市场运作中的业务定义为基础,重新定义一个业务在业务系统中的概念、业务流程、数据流程、业务间关系、数据间关系等,以便于计算机高效的实现这个业务。需求分析既可以用于一个业务的具体分析,也可以用于一类业务的分析和整个业务支撑系统的分析2.1 用户需求当您在办公室或商务旅行,但有时,你可能需要做一些事必须试用你家里的电脑,例如:阅读您的电子书或阅读您的电子邮件。有时您可能生病和将不能够离开您的公寓,但是,项目工程紧张,而您又需要完成这个项目。驾驶通过城市去访问您的公司的电脑带着高烧,这不是一个真正的好主意。 这是当远程访问软件出场的时候了!它能帮
22、助你访问远程计算机就像访问本地计算机一样,距离不再是问题! 远程桌面控制显示另一台计算机的屏幕(透过网际网络或本地网络)在您自己的屏幕上。该程序允许你利用你的鼠标和键盘来控制其他的计算机远程。这意味着您可以在远程计算机工作,就像你坐在它前面一样。 这样用户可以真正的实现远程办公。2.2 可采用的技术方案 远程监控系统的实现主要采用了套接字这项技术和虚拟鼠标键盘消息的API,在大多数情况下套接字是底层传输代码的必选技术。Socket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中。
23、该程序采用TCP协议,因为流控和差控的存在使得传输更具有稳定性。UDP虽然效率更高,但是有掉包的情况出现,这是本方案所不允许的。 通过SOCKET传递的虚拟消息结构体到对端,被对端主机解释并虚拟,最终达到程序目的。下面我们着重再介绍下什么是SOCKET.套接字是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。可以将套接字看作不同主机间的进程进行双向通信的端点,它构成了单个主机内及整个网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念。套接字通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序)。
24、各种进程使用这个相同的域互相之间用Internet协议簇来进行通信。 套接字可以根据通信性质分类,这种性质对于用户是可见的。应用程序一般仅在同一类的套接字间进行通信。不过只要底层的通信协议允许,不同类型的套接字间也照样可以通信。套接字有两种不同的类型:流套接字和数据报套接字。要通过互联网进行通信,你至少需要一对套接字,其中一个运行于客户机端,我们称之为ClientSocket,另一个运行于服务器端,我们称之为ServerSocket。根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。所谓服务器监听,是服务器端套接字并不定位具体
25、的客户端套接字,而是处于等待连接的状态,实时监控网络状态。所谓客户端请求,是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。 所谓连接确认,是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。 2.3 可行性技术研究2.3.1 技术可行性本次开发所用到的一
26、系列的技术已是累积了几十年的技术,这些技术在这么多年的发展中并没有被淘汰,反而是越来越来热门。当初远程控制这门技术在DOS时代就已经存在,只是受网络的制约,但是此时这门技术还是受网络技术制约着。网络流量的问题是造成所有通信程序的不稳定性的罪魁祸首。但是本程序在局域网中是完全能够实现的,而且本程序也是专门为企业网内部所设计,因为数据信息没被加密,如果想走Internet,则需建立VPN。2.3.2 经济可行性本软件成本低廉,要的只是两个ISP分发的IP地址,而且这也多用于局域网或企业网等内网,就更谈不上成本上的问题。但是如果需要对程序的质量提高可以购买MD5算法,对传输数据进行加密。第3章 概要
27、设计和详细设计在讨论远程监控的话题之前,必须明确什么是远程监控系统技术。远程监控技术是在网络上由一台计算机远距离去控制另一台计算机的技术。这里的远程不是字面意思的远距离,一般指通过网络控制远端电脑。不过,大多数时候所说的远程控制往往指的是局域网中的远程控制或者VPN中。当操作者使用主控端电脑时,就如同坐在被控端电脑的屏幕前一样,可以启动启动被控端的应用程序,可以使用被控端电脑的文件资料,甚至可以利用被控端电脑的外部打印设备和通信设备进行打印和访问互联网,就像利用遥控器遥控电视机一样。不过有一点要明确,那就是主控端电脑只是将键盘和鼠标的指令传送给远程电脑,同时将被控端电脑的屏幕画面通过通信线路回
28、传过来,从而达到控制与被控制的目的。远程控制软件一般分为两部分:客户端程序和服务端程序。在使用前需要将客户端程序安装到主控电脑上,将服务器端程序安装到被控端电脑上。控制的过程一般是先在被控端电脑上执行服务器端程序,然后在控制端电脑执行客服端程序,与服务器端建立一个特殊的远程服务,然后通过这个远程服务,使用各种远程控制功能发送远程控制命令,控制服务器端的各种应用程序的运行。通过远程控制软件,可以进行很多方面的远程操作,包括获取目标电脑的屏幕图像,记录并提取远端键盘事件,鼠标事件。但这些过程与网速有很大的关系。网速过慢是很多网络程序的瓶颈,远程控制也不例外。获取被控端电脑屏幕的过程,实际上就是服务
29、器端传输一副屏幕图片到客服端的过程,这个过程需要传输大量的数据,这牵涉到如何对屏幕图片数据进行压缩。另外,什么时候发送屏幕图片数据,是不是每次都需要发送整个屏幕的数据,这些都是远程控制必须面对的问题。3.1 开发工具简介本系统采用VC+ 6.0作为开发工具。VC+ 6.0是一个可视化的完整的应用程序开发环境,使用它可以开发出专业级别的WINDOWS应用程序。3.2 WIN32应用程序说明WINDOWS程序开发流程为程序代码和UI资源,两大部分。两部分最后以RC编译器整合为一个完整的EXE档案。所谓UI资源是指功能菜单,对话框外貌,程序图标,光标形状等等东西。这些UI资源的实际内容是借助各种工具
30、产生,并以各种扩展名的文档存在的,如ISO,BMP,CUR等等。程序员必须在所谓的资源描述文档.RC中找到他们。RC编译器读取文档的描述后将所有的UI资源制作出一个RES文档,在与程序代码结合在一起。其主导思想是消息驱动。所有消息最终发网窗口程序队列等待处理。3.2.1 Windows应用程序组成 1.C,CPP源程序文件:源程序文件包含了应用程序的数据、类、功能逻辑模块(包括事件处理、用户界面对象初始化以及一些辅助例程)的定义。2.H,HPP头文件:头文件包含了CPP、C源文件中所有数据、模块、类的声明。当一个CPP、C源文件要调用另一个CPP、C中所定义的模块功能时,需要包含那个CPP、C
31、文件对应的头文件。3.资源文件:包含了应用程序所使用的全部资源定义,通常以.RC为后缀名。注意这里说的资源不同与前面提到的资源,这里的资源是应用程序所能够使用的一类预定义工具中的一个对象,包括:字符串资源、加速键表、对话框、菜单、位图、光标、工具条、图标、版本信息和用户自定义资源等。其中CPP、C和头文件同DOS下的类似,需要解释的是资源文件。在DOS程序设计过程中,所有的界面设计工作都在源程序中完成。而在Windows程序设计过程中,象菜单、对话框、位图等可视的对象被单独分离出来加以定义,并存放在资源源文件中,然后由资源编译程序编译为应用程序所能使用的对象的映象。资源编译使应用程序可以读取对
32、象的二进制映象和具体数据结构,这样可以减轻为创建复杂对象所需要得程序设计工作。程序员在资源文件中定义应用程序所需使用的资源,资源编译程序编译这些资源并将它们存储于应用程序的可执行文件或动态连接库中。在Windows应用程序中引入资源有以下一些好处:1.降低内存需求:当应用程序运行时,资源并不随应用程序一起装入内存,而是在应用程序实际用到这些资源时才装入内存。在资源装入内存时,它们拥有自己的数据段,而不驻留于应用程序数据段中;当内存紧张时,可以废弃这些资源,使其占用的内存空间供他用,而当应用程序用到这些资源时才自动装入,这种方式降低了应用程序的内存需求,使一次可运行更多的程序,这也是Window
33、s内存管理的优点之一。2.便于统一管理和重复利用:将位图、图标、字符串等按资源文件方式组织便于统一管理和重用。比如,将所有的错误信息放到资源文件里,利用一个函数就可以负责错误提示输出,非常方便。如果在应用程序中要多次用到一个代表公司的徽标位图,就可以将它存放在资源文件中,每次用到时再从资源文件中装入。这种方式比将位图放在一个外部文件更加简单有效。3.应用程序与界面有一定的独立性,有利于软件的国际化:由于资源文件独立于应用程序设计,使得在修改资源文件时(如调整对话框大小、对话框控制位置),可以不修改源程序,从而简化了用户界面的设计。另外,目前所提供的资源设计工具一般都是采用“所见即所得”方式,这
34、样就可以更加直观、可视的设计应用程序界面。由于资源文件的独立性,软件国际化工作也非常容易。比如,现在开发了一个英文版的应用程序,要想把它汉化,只需要修改资源文件,将其中的对话框、菜单、字符串资源等汉化即可,而无需直接修改源程序。但是,应用程序资源只是定义了资源的外观和组织,而不是其功能特性。例如,编辑一个对话框资源,可以改变对话框的安排和外观,但是却没有也不可能改变应用程序响应对话框控制的方式。外观的改变可以通过编辑资源来实现,而功能的改变却只能通过改变应用程序的源代码,然后重新编译来实现。Windows应用程序的生成同DOS下类似,也要经过编译、链接两个阶段,只是增加了资源编译过程,基本流程
35、如图表 31图表 31C、CPP编译器将C源程序编译成目标程序,然后使用连接程序将所有的目标程序(包括各种库)连接在一起,生成可执行程序。在制作Windows应用程序时,编译器还要为引出函数生成正确的入口和出口代码。连接程序生成的可执行文件还不能在Windows环境下运行,必须使用资源编译器对其进行处理。资源编译器对可执行文件的处理是这样的:如果该程序有资源描述文件,它就把已编译为二进制数据的资源加入到可执行文件中;否则,仅对该可执行文件进行相容性标识。应用程序必需经过资源编译器处理才可以在Windows环境下运行3.2.2 事件驱动的程序设计传统的MS-DOS程序主要采用顺序的、关联的、过程
36、驱动的程序设计方法。一个程序是一系列预先定义好的操作序列的组合,它具有一定的开头、中间过程和结束。程序直接控制程序事件和过程的顺序。这样的程序设计方法是面向程序而不是面向用户的,交互性差,用户界面不够友好,因为它强迫用户按照某种不可更改的模式进行工作。它的基本模型如图32所示。事件驱动程序设计是一种全新的程序设计方法,它不是由事件的顺序来控制,而是由事件的发生来控制,而这种事件的发生是随机的、不确定的,并没有预定的顺序,这样就允许程序的的用户用各种合理的顺序来安排程序的流程。对于需要用户交互的应用程序来说,事件驱动的程序设计有着过程驱动方法无法替代的优点。它是一种面向用户的程序设计方法,它在程
37、序设计过程中除了完成所需功能之外,更多的考虑了用户可能的各种输入,并针对性的设计相应的处理程序。它是一种“被动”式程序设计方法,程序开始运行时,处于等待用户输入事件状态,然后取得事件并作出相应反应,处理完毕又返回并处于等待事件状态。它的框图如图33所示:图表 32图表 33事件驱动围绕着消息的产生与处理展开,一条消息是关于发生的事件的消息。事件驱动是靠消息循环机制来实现的。消息是一种报告有关事件发生的通知。消息类似于DOS下的用户输入,但比DOS的输入来源要广,Windows应用程序的消息来源有以下四种:1 输入消息:包括键盘和鼠标的输入。这一类消息首先放在系统消息队列中,然后由Windows
38、将它们送入应用程序消息队列中,由应用程序来处理消息。 2 控制消息:用来与Windows的控制对象,如列表框、按钮、检查框等进行双向通信。当用户在列表框中改动当前选择或改变了检查框的状态时发出此类消息。这类消息一般不经过应用程序消息队列,而是直接发送到控制对象上去。3 系统消息:对程序化的事件或系统时钟中断作出反应。一些系统消息,象DDE消息(动态数据交换消息)要通过Windows的系统消息队列,而有的则不通过系统消息队列而直接送入应用程序的消息队列,如创建窗口消息。4 用户消息:这是程序员自己定义并在应用程序中主动发出的,一般由应用程序的某一部分内部处理。在DOS应用程序下,可以通过getc
39、har()、getch()等函数直接等待键盘输入,并直接向屏幕输出。而在Windows下,由于允许多个任务同时运行,应用程序的输入输出是由Windows来统一管理的。Windows操作系统包括三个内核基本元件:GDI, KERNEL ,USER。其中GDI(图形设备接口)负责在屏幕上绘制像素、打印硬拷贝输出,绘制用户界面包括窗口、菜单、对话框等。系统内核KERNEL支持与操作系统密切相关的功能:如进程加载,文本切换、文件I/O,以及内存管理、线程管理等。USER为所有的用户界面对象提供支持,它用于接收和管理所有输入消息、系统消息并把它们发给相应的窗口的消息队列。消息队列是一个系统定义的内存块,
40、用于临时存储消息;或是把消息直接发给窗口过程。每个窗口维护自己的消息队列,并从中取出消息,利用窗口函数进行处理。框图如下34图表 343.2.3 用户界面对象对象介绍窗口窗口是用户界面中最重要的部分。它是屏幕上与一个应用程序相对应的矩形区域,是用户与产生该窗口的应用程序之间的可视界面。每当用户开始运行一个应用程序时,应用程序就创建并显示一个窗口;当用户操作窗口中的对象时,程序会作出相应反应。用户通过关闭一个窗口来终止一个程序的运行;通过选择相应的应用程序窗口来选择相应的应用程序。一个典型的窗口外观如图35所示。图表 35边框绝大多数窗口都有一个边框,用于指示窗口的边界。同时也用来指明该窗口是否
41、为活动窗口,当窗口活动时,边框的标题栏部分呈高亮显示。用户可以用鼠标拖动边框来调整窗口的大小。系统菜单框系统菜单框位于窗口左上角,以当前窗口的图标方式显示,用鼠标点一下该图标(或按ALT+空格键)就弹出系统菜单。系统菜单提供标准的应用程序选项,包括:Restore(还原窗口原有的大小),Move(使窗口可以通过键盘上的光标键来移动其位置),Size(使用光标键调整窗口大小),Minimize(将窗口缩成图标),Maximize(最大化:使窗口充满整个屏幕)和Close(关闭窗口)。标题栏标题栏位于窗口的顶部,其中显示的文本信息用于标注应用程序,一般是应用程序的名字,以便让用户了解哪个应用程序正
42、在运行。标题栏颜色反映该窗口是否是一个活动窗口,当为活动窗口时,标题栏呈现醒目颜色。鼠标双击标题栏可以使窗口在正常大小和最大化状态之间切换。在标题栏上按下鼠标器左键可以拖动并移动该窗口,按右键弹出窗口系统菜单菜单栏菜单栏位于标题栏下方,横跨屏幕,在它上面列出了应用程序所支持的命令,菜单栏中的项是命令的主要分类,如文件操作、编辑操作。从菜单栏中选中某一项通常会显示一个弹出菜单,其中的项是对应于指定分类中的某个任务。通过选择菜单中的一个项(菜单项),用户可以向程序发出命令,以执行某一功能。如选择“文件-打开.”菜单项会弹出一个打开文件对话框,让用户选择一个文件,然后打开这个文件。一般的,以“.”结
43、尾的菜单项文本表明选择该项时会弹出一个对话框,让用户输入信息,然后执行操作,如“文件-打开.”。若不以“.”结尾,则表明选择该菜单项直接执行一个动作,如“编辑”菜单下的“粘贴”菜单项。若一个菜单项呈现灰色,则表明该菜单当前不可用。有时菜单项上还有加速键,加速键是一种键盘组合,它是菜单项的一种替代方式,可以让用户通过键盘直接发出命令;在键盘上按下这一键盘组合,就等效于选择了相应的菜单。如“粘贴(P) CTRL+V”,就表示粘贴操作的加速键是CTRL+V,按下CTRL+V就执行粘贴操作。客户区客户区是窗口中最大的一块空白矩形区域,用于显示应用程序的输出。例如,字处理程序在客户区中显示文档的当前页面
44、。应用程序负责客户区的绘制工作,而且只有和该窗口相对应的应用程序才能向该用户区输出垂直滚动条和水平滚动条垂直滚动条和水平滚动条分别位于客户区的左侧和底部,它们各有两个方向相反的箭头和一个深色的长度可变的滚动块。可以用鼠标选中滚动条的箭头上下卷滚(选中垂直滚动条时)或水平卷滚(选中水平滚动条时)客户区的内容。滚动块的位置表示客户区中显示的内容相对于要显示的全部内容的位置,滚动块的长度表示客户区中显示的内容大小相对于全部内容大小的比例对话框对话框是一种特殊的窗口,它提供了一种接收用户输入、处理数据的标准方法。特别的,当用户输入了一个需要附加信息的命令时,对话框是接收输入的标准方法。比如,假设用户要
45、求系统打开一个文件,对话框就可以提供一个让用户从一组文件中选择一个文件的标准方法。如前所述,在一般情况下,在选择菜单名字后面跟着省略号(.)的菜单项通常会弹出一个对话框。图36给出了查找对话框的一个例子图表 363.3 网络通信设计服务器端的网络模块负责监听客服端的连接,负责接收并处理客户端发送过来的命令(鼠标,键盘,网络消息等命令),在本机上处理这些消息并发送各种数据(屏幕数据,命令返回数据)到客户端监听程序。客服端网络模块负责连接到服务器端的监听SOCKET,负责向服务器端发送各种操作命令(鼠标,键盘,各种通用消息参数命令等),负责接收从服务器端发过来的数据(屏幕数据,命令执行结果等),并
46、对这些数据进行解压解码,然后将这些数据的内容显示到屏幕上。其中采用的是流式套接字,他是基于TCP通信原理而封装的。是面向连接的服务,提供了更高的安全性。通常情况下,一个协议提供面向连接的服务,或提供无连接的服务。面向连接的服务中,进行数据交换之前,必须与通信方建立一条路径。这样既确定了通信方之间存在路由,又保证了通信双方都是活动的、都可彼此响应,但其特点是在通信双方之间建立一个通信信道需要很多开支。除此以外,大部分面向连接的协议为保证投递无误,可能会因为执行额外的计算来验证正确性,因此,进一步增加开支。而无连接协议却不保证接收端是否正在收听。无连接服务类似于邮政服务:发信人把信装入邮箱即可。至
47、于收信人是否想收到这封信或邮局是否会因为暴风雨未能按时将信件投递到收信人处等等,发信人都不得而知。在断开连接的过程中,TCP使用从容关闭。从容关闭只出现在面向连接的协议中。在这种关闭过程中,一方开始关闭通信会话,但另一方仍然可以读取线上或网络堆栈上已挂起的数据。如果面向连接的协议不支持从容关闭,只要其中一方关闭了通信信道,都会导致连接立即中断,数据丢失,接收端不能读取数据这些情况出现。使用T C P协议,连接双方都必须执行一次关闭,以便完全中断连接。发起方向另一个通信方发出一个带有F I N控制标志的分段(数据报)。接收端的通信方则向发起方返回一个A C K控制标志,确认收到F I N,但此时发起方仍然可发送数据。F I N