《局域网点对点通信系统设计.doc》由会员分享,可在线阅读,更多相关《局域网点对点通信系统设计.doc(62页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流局域网点对点通信系统设计.精品文档.毕业设计(论文)局域网点对点通信系统设计摘 要所谓网络中的点对点通信是实现网络上不同计算机之间,不经过任何中继设备而直接交换数据或服务的一种技术。由于允许网络中任何一台计算机可以直接连到网络中的其他计算机,并与之进行数据交换,这样既可以消除中间环节,也使得网络上的沟通变得更加容易、更加直接。本文介绍的是一种使用Winsock编程技术,基于TCP/IP协议的、面向连接的流式套接字网络通信程序设计。本文首先介绍了计算机通信网的基础理论,主要介绍了计算机通信网的组成、通信协议和TCP/IP模型。其次,详细阐述了V
2、isual C+.NET网络通信编程知识,其中重点介绍了窗体设计和Windows Socket。最后给出了利用VC中Winsock控件编写的服务端、客户端通信程序的基本思路,及部分程序。关键词点对点;TCP/IP;SocketAbstractPeer to peer communication is a computer communication method which is used in different computers to transmit data or services directly, without other device. As the network allo
3、ws any computer connect to other computer directly and exchange data with each other, it eliminates intermediate links, make communication much easier, more directly. The paper introduces method through Winsock program , based on TCP/IP and face connect was set up.At first, the paper introduces the
4、base theory of computer communication, include the composition of computer communication network, communication protocol and TCP/IP model. Secondly, elaborate the communication theory of Visual C+.NET, which focuses on Windows Socket and forms design. In the end, we give the basic thoughts of sever
5、and client translated program made by Winsock controller by VC.Keywords Peer to Peer;TCP/IP;Socket;目录摘要IAbstractII目录III第1章绪论11.1课题背景11.1.1P2P技术的国内外现状11.1.2P2P技术的研究成果及发展趋势21.1.3P2P技术所存在的问题31.2本文主要研究内容4第2章计算机通信基础及相关原理52.1计算机通信网通信原理52.1.1计算机通信的概念52.1.2计算机通信网的组成及网络结构62.1.3TCP/IP协议模型72.2本章小结9第3章Visual C+
6、.NET网络通信编程原理103.1窗口与消息103.2MFC应用基础123.3Windows窗体设计133.4Windows Socket概念及编程机理153.4.1Windows Sockets套接字及分类153.4.2套接字函数163.5本章小结20第4章软件程序设计214.1程序流程框图214.2主要程序及功能224.2.1TCPSocket类的封装224.2.2对话框添加相应控件264.2.3对话框初始化324.2.4发送和接收数据线程344.3本章小结35结论36参考文献37致谢38附录1I附录2IV附录3IX第1章绪论1.1课题背景1.1.1P2P技术的国内外现状目前计算机通信最常
7、用的方法主要是串口通信,USB通信和网络通信。随着网络技术的发展,网络通信发挥着越来越重要的作用,这是因为计算机网络容易组建与扩展,一个简单的局域网的组建只需要HUB,网卡,网线和几台计算机即可。因此利用网络技术在局域网上实现通信,具有很强的实用性。在网络通信中应用最广泛,最热门的技术就是P2P。P2P的英文全称是peer-to-peer,可以理解为点对点的意思,或称为对等网络计算机,通俗的讲就是端到端1。当对等计算机在客户机/服务器模式下作为客户机进行操作时,它还包含另外一层可使其具有服务器功能的软件。对等计算机可对其他计算机的要求进行响应。请求和响应范围和方式都根据具体应用程序不同而不同。
8、P2P可以简单地定义为通过直接交换共享计算机资源和服务,不同PC用户之间不经过中继设备直接交换数据或服务的技术,它允许互联网用户直接使用对方的文件,使得网络上的沟通变得容易、更直接,真正地消除了中间商。每个人可以直接连接到其他用户的计算机交换文件,而不是像过去那样连接到服务器去浏览与下载。Napster是最早出现的P2P系统之一。Napster实质上并非是纯粹的P2P系统,它通过一个中央服务器保存所有Napster用户上传的音乐文件索引和存放位置的信息。当某个用户需要某个音乐文件时,首先连接到Napster服务器,在服务器进行检索,并由服务器返回存有该文件的用户信息;再由请求者直接连到文件的所
9、有者传输文件。 Napster首先实现了文件查询与文件传输的分离,有效地节省了中央服务器的带宽消耗,减少了系统的文件传输延时目前,Internet上P2P应用软件层出不穷,如BT、迅雷、PPLive、SNS等,P2P软件用户数量从几十万、几百万到上千万不等,并且还在急剧增加。P2P计算技术在军事领域、商业领域、政府信息和通讯等领域也得到了广泛的应用,使得各领域的信息交换更加方便,从而提高了信息的流通速度,提高了各领域运作效率。1.1.2P2P技术的研究成果及发展趋势P2P系统最大的特点就是用户之间直接共享资源,其核心技术就是分布式对象的定位机制,这也是提高网络可扩展性、解决网络带宽被吞噬的关键
10、所在。为了解决对象定位等关键技术,P2P网络出现了多种网络模型,每种模型都有各自的优缺点,有的还存在着本身难以克服的缺陷,因此在目前P2P技术还远未成熟的阶段,各种网络结构依然能够共存,甚至呈现相互借鉴的态势2。(1)集中目录式结构集中目录式P2P结构是最早出现的P2P应用模式,因为仍然具有中心化的特点也被称为非纯粹的P2P结构。用于共享MP3音乐文件的Napster是其中最典型的代表,其用户注册与文件检索过程类似于传统的C/S模式,区别在于所有资料并非存储在服务器上,而是存贮在各个节点中。(2)纯P2P网络模型纯P2P模式也被称作广播式的P2P模型。它取消了集中的中央服务器,每个用户随机接入
11、网络,并与自己相邻的一组邻居节点通过端到端连接构成一个逻辑覆盖的网络。对等节点之间的内容查询和内容共享都是直接通过相邻节点广播接力传递,同时每个节点还会记录搜索轨迹,以防止搜索环路的产生。(3)混合式网络模型Kazaa是混合模型的典型代表,它在纯P2P分布式模型基础上引入了超级节点的概念,综合了集中式P2P快速查找和纯P2P去中心化的优势。Kazaa模型按节点计算能力、内存大小、连接带宽、网络滞留时间等不同,为将节点分为普通节点和搜索节点两类。(4)结构化网络模型所谓结构化与非结构化模型的根本区别在于每个节点所维护的邻居是否能够按照某种全局方式组织起来以利于快速查找。结构化P2P模式是一种采用
12、纯分布式的消息传递机制和根据关键字进行查找的定位服务,目前的主流方法是采用分布式哈希表(DHT)技术,这也是目前扩展性最好的P2P路由方式之一。基于DHT的代表性的研究项目主要包括加州大学伯克利分校的CAN项目和Tapestry项目,麻省理工学院的Chord项目、IRIS项目,微软研究院的Pastry项目、中国科技大学的PPOCEAN项目等。这些系统一般都假定节点具有相同的能力,这对于规模较小的系统较为有效。但这种假设并不适合大规模的Internet部署。同时基于DHT的拓扑维护和修复算法也比Gnutella模型和Kazaa模型等无结构的系统要复杂得多,甚至在Chord项目中产生了“绕路”的问
13、题。事实上,目前大量实际应用还大都是基于无结构的拓扑和泛洪广播机制,现在大多采用DHT方式的P2P系统缺乏在Internet中大规模真实部署的实例,成功应用还比较少见。在今后的发展中,在P2P技术上实现数据存取安全、路由安全、用户身份认证和身份管理都需要进一步研究,实现P2P应用之间的统一资源定位,统一路由。使得P2P技术有一个统一开发标准,将能够融合P2P技术,提升整体性能3。1.1.3P2P技术所存在的问题伴随着P2P的发展,也随之产生了一些技术性的问题和社会性的问题。这些问题具有普遍性,并可能在很多情况下发生。(1)P2P的网络拓扑结构的研究拓扑结构是指分布式系统中各个计算单元之间的物理
14、或逻辑的互联关系,节点之间的拓扑结构一直是确定系统类型的重要依据,目前互连网络中广泛使用集中式、层次式等拓扑结构,Internet本身是世界上最大的非集中式的互联网络,但是九十年代所建立的一些网络应用系统却是完全的集中式的系统、很多Web应用都是运行在集中式的服务器系统上。集中式拓扑结构系统目前面临着过量存储负载、Dos攻击等一些难以解决的问题。层次式拓扑结构是一种应用比较广泛的分布式拓扑结构,DNS系统是其最典型的应用。P2P系统一般要构造一个非集中式的拓扑结构,在构造过程中需要解决系统中所包含的大量节点如何命名、组织以及确定节点的加入、离开方式、出错恢复等问题。(2)P2P网络的支撑技术I
15、nternet技术的发展使得连入互联网络中的设备不再局限于计算机,在P2P的计算环境中要求任何设备都可以在任何地点很容易的加入到这个环境中,所谓的计算设备既包括有线设备也包括无线设备,这样就需要很多很多网络传输的支撑技术来支持各种不同设备连入整个P2P网络。(3)带宽问题由于许多P2P应用程序同时运行客户端和服务器端的应用程序,所以它对上行带宽和下行带宽都要占用,而且很多P2P应用使用了洪泛式(Flooding)的查询技术,这就会导致大量的广播消息充斥整个网络,增加网络流量。这对大多数提供非对称带宽通道的ISP来说,如果不进行专门的配置就很难适应P2P程序的运行。(4)黑客和病毒入侵问题当使用
16、P2P时,验证共享文件来源是否安全是非常困难的。P2P共享软件存在着两方面的安全隐患:黑客和病毒。P2P共享软件常被攻击者选择作为传递恶意代码的载体。由于在P2P网络中,每个节点御防黑客和病毒攻击能力是不同的,因此只要有一个节点遭到攻击,就可以通过内部共享和通信机制将攻击扩散到附近的邻居节点,在短时间内可以造成网络拥塞甚至瘫痪,甚至通过网络攻击者可以完全控制整个网络。因此,黑客和病毒的潜在危机对P2P系统安全性和健壮性提出了更高的要求,需要对P2P应用来源和P2P用户进行授权控制。(5)敏感信息的泄漏问题当使用P2P传输信息时,P2P软件几乎都设定使用者只能传输特定数据夹中的信息,但如果遭到恶
17、意代码的攻击,就可能门户大开,在不知不觉中会给其他用户访问他人敏感信息的访问权限,这样可能造成有意图的人或公司入侵给人、公司或国家的敏感信息,如获取用户的电脑系统资料、个人信息、银行卡的用户名和密码、公司客户往来信息、国家机密等,因此需要考虑如何保护用户的安全策略。(6)知识产权问题因为在P2P网络中没有一个统一管理的机制来对网络中的各个用户进行认证和授权管理,P2P网络中的内容都是分散的,随着P2P共享软件的繁荣加速了盗版媒体的分发,增加了知识产权保护的难度。1.2本文主要研究内容网络中的点对点是实现网络上不同计算机之间,不经过中继设备直接交换数据或服务的一种技术。由于允许网络中任何一台计算
18、机可以直接连到网络中其他计算机,并与之进行数据交换,这样既可以消除中间环节,也使得网络上的沟通变得更加容易、更加直接。本设计使用Visual C.NET语言,应用Socket类编程技术来实现局域网的点对点通信;在第二章主要介绍了计算机通信网的基础知识,如什么是计算机通信,计算机通信网的概念、组成和通信协议,重点是TCP/IP模型;第三章介绍编程软件Visual C+.NET以及本设计用到的相关知识,主要是Socket套接字及其函数;在第四章给出主要程序和整个程序的流程图。第2章计算机通信基础及相关原理2.1计算机通信网通信原理2.1.1计算机通信的概念计算机通信是有两个主要的技术领域发展演而变
19、来的,一是计算机技术,另一个是通信技术。计算机与通信的相互结合主要有两个方面。一方面,网络通信为计算机之间的数据传递和交换提供了必要的手段;另一方面,数字计算技术的发展渗透到通信技术中,又提高了通信网络的各种性能。为了协同工作的目的,在两台或多台“自治的”计算机之间经由数据通路(包括通信网络)进行信息交换,通常称作计算机通信。关于“自治”,可以理解为如果一台计算机能够强迫启动、关闭或控制另一台计算机,则它们不是自治计算机。所谓的计算机通信网是指能够互换信息且独立自主的计算机及通信子网的集合,可以形式化地描述为:计算机通信网是计算机主机、通信子网和通信协议的集合。计算机的通信子系统是核心要素,它
20、包括了计算机的通信功能。通信子系统的功能之一是决定数据接收/发送方式、数据的封装/拆卸、传输速率等,从而将不同类型的数据转换为双方都能认可的形式,这项功能是面向应用进程的。通信子系统的另一个更重要的功能是面向网络的,它为信息的传输确定了合适的数据通路或网络路径,包括通路的建立、维护和撤销、无差错传输数据(差错控制),网络中路由选择与速率匹配(流量控制),以及网络之间的互联等。我们将通信子系统之间对应的信息交换互称为计算机到计算机的通信。数据通信系统为计算机之间的信息交换提供了传输媒介,并提供可靠的数据传输能力。数据通信系统既可以是单条的直接传输通路(如双绞线、同轴电缆、光线或无线信道),也可以
21、是互连的多条的传输通路,即网络通信。应用进程的作用是为用户提供网络服务,更多的依赖于用户业务。应用进程之间的通信称为用户到用户的通信。在应用进程与通信子系统之间必须提供相应的接口,其作用类似于操作系统中的系统调用功能。基于以上对计算机通信网要素的分析,将计算机通信网按照其功能划分为信息交换和信息处理两部分,及相应由通信子网和资源子网两部分组成。通信子网负责数据的无差错和有序传递,包括通信处理器、集中器、路由器、网桥等设备,传输媒介可以是电话线路、有线电缆(包括数据传输电缆、有线电视信号传输电缆等)、光线、无线、微波、卫星等,其处理功能包括差错控制、流量控制、路由选择、网络互联等。资源子网是计算
22、机通信的本地系统环境,包括主机、终端和应用程序等。资源子网的功能是:用户资源配置、数据的处理和管理、软件和硬件共享以及负载的均衡等。还包括一个合适的接口,以保证主机能无缝的接入一个通信子网。2.1.2计算机通信网的组成及网络结构从计算机通信网的物理组成来看,网络的组成元素可以分为网络节点和网络链路两部分。网络节点又分为端节点和交换节点两种,端节点是指源或宿节点,例如用户主机或用户终端;交换节点指网络通信过程中起控制、暂存和转发信息作用的节点。例如程控交换机、集中器、路由器、网桥等。端节点是用户数据的发源地和归宿地,而交换节点本身不向用户提供新的数据,只是对用户数据进行搬运和转移。通信链路是指传
23、输信息的通路,即通信子网中的传输媒介,其作用是在机器之间传送比特。因此,通信子网主要由交换节点和通信链路组成,而资源子网中主要包括拥有资源的用户主机和需求资源的用户终端,它们都是端节点。所以,计算机通信网就是一个由通信子网承载的、传输和共享资源子网的和各类信息的系统。所谓网络的拓扑结构是指通信子网中的交换节点的互连模式。按拓扑结构进行划分,网络可以集中式和分布式两种基本类型。在集中网络内,所有信息都必须经过一个中央处理设备(即交换节点)。通信链路都是从中央节点向外辐射,这个中心节点的可靠性基本上决定了整个网络的可靠性,集中式网络又成为星型网。分布式通信子网又称为格状网,即其中任何一个节点都可以
24、和若干个节点直接相连,在分组交换的情况下,即使某个节点或某条链路出现故障,用户发送的数据流也可以经过不同的路径到达目的地,因此分布式网络可靠性较高。局域网(LAN)是处于一个建筑物、同一大院或方圆数公里地域内的专用网络。局域网常被用来来接办公室或大学里的个人计算机和工作站,以便共享资源和交换信息。LAN与其他网络相比具有三个不同特征:范围、传输技术、拓扑网络。LAN的覆盖范围比较小,这意味着即使在最坏的情况下起传输时间也是有限的,并且可以预先知道传输的最大时间。这就简化了网络的设计和网络的管理。LAN中使用的传输技术使用一条电缆连接多有机器。传统的LAN速度为10兆比特每秒100兆比特每秒,传
25、输延时较短(数十个毫秒),并且出错率低。LAN的拓扑结构通常采用广播式网络,其中常用的是总线型和环形结构。在广播式LAN中,任意时刻只有一台机器是主站并可以进行数据发送,而其他的机器则不能发送,若要两个或更多机器都想发送信息时,则现需要冲突机制来解决冲突。IEEE802.3标准,就是通常所称的以太网,就是一种居于总线的局域网,它使用分布式控制,速度为10兆比特每秒或100兆比特每秒。IEEE802.5标准(IBM令牌环)定义了常见的基于环形的LAN,其速度为千兆比特每秒。典型的,每个比特环绕一周的时间仅相当于发出几个比特的时间,常常小于整个分组的传输时间。2.1.3TCP/IP协议模型通信协议
26、是指相互通信的双方(或多方)对如何进行信息交换所一致同意的一整套规则。通信协议的各种类型可以分为以下几种。面向应用的协议:为完成某些特定应用的而制定的协议。从分层的协议结构来看,包括应用层的专用服务元素,例如TCP/IP模型中的FTP、TELNET、SMTP等。面向应用的协议也可以称为进程到进程协议。系统到系统协议:支持系统中特定的应用进程间的数据交换,为应用进程提供网络通信服务,包括应用层的公共服务元素、表示层协议等。端到端的协议:完成端到端的可靠传输,建立、保持以及维护端到端的连接,包括会话层协议、TCP和UDP。点到点协议:实现直接相连的节点之间的数据传输,如数据链路层协议HDLC和In
27、ternet中的PPP协议等。网络接入协议:如介质接入控制(MAC)等。网间互联协议:从网络介质的延伸,不同网络用户的寻址,到异构网络及按协议的转换。其他网内协议:包括流量控制、寻址和路由控制等。TCP/IP模型起源于1969年美国国防部赞助研究的网络ARPANET-世界上第一个采用分组交换技术的计算机通信网。1982年开发了一簇新的协议,其中最重要的就是TCP和IP,IP协议用来给不同的通信子网或局域网提供一个统一的互连平台。TCP协议则是用来为应用程序提供端到端通信和控制功能。这个结构体系成为TCP/IP协议模型。TCP/IP模型包括两个协议:传输控制协议(TCP)和网络传输协议(IP),
28、两者都是非基于任何特定硬件平台的网络协议,既可以用于局域网又可以用于广域网。TCP/IP协议模型从更实用的角度出发,形成了具有高效率的四层体系结构,即主机-网络层、网络互联层(IP层)、传输层和应用层。(1)主机-网络层该层中使用的协议大多数是各通信子网的固有协议,例如以太网802.3协议、令牌环网802.5协议或分组交换网X.25协议等。主机-网络层的作用是传输经网络互联层处理过的信息,并提供一个主机与实际网络的接口,而具体的接口关系则可以有实际网络的类型所决定。(2)网络互连层(IP层)它的功能是使主机可以把分组发往任何网络,并使个分组独立传向目的地(中途可能经有不同网络),这称为数据包方
29、式的信息传送。这些分组到达的顺序可能和发送的顺序不同,应此需要按顺序发送和接收时,高层必须对分组排序。分组路由和拥塞控制是IP层设计的主要问题。网络互联层所使用的协议是IP协议。它把传输层送来的消息装成数据报文,并把IP数据报文传递给主机-网络层。IP协议提供统一的IP数据包格式,以消除各通信子网的差异,从而为信息的发送方和接收方提供透明的传输通道。网络传输层的主要任务是为IP数据报文分配一个全网唯一的数据地址,实现IP数据的识别与管理;IP数据报路由机制;发送或接收时IP数据报的长度和通信子网所要求的数据包长度匹配。(3)传输层传输层位应用进程提供了端到端通信功能。该层协议处理网络互联层没有
30、处理的问题,保证通信连接的可靠性,能够自动适应网络的各种变换。传输层主要有两个协议,即传输控制协议(TCP协议)和用户数据包协议(UDP)。TCP协议是面向连接的,以建立高可靠性信息传输连接为目的,它负责把用户数据按一定的格式和长度组成多个数据报进行发送,并在接受到数据后按分解顺序从新组装和恢复数据。TCP协议与任何特定网络的特征相独立,对分组没有太多的限制,单一般TCP的实现均以网络中可以承载的适当大小座位数据单元的长度,最大长度为65千字节,很大的分组将在IP层进行分割后传输。为例完成可靠的数据传输任务,TCP协议具有数据报的顺序控制、差错检测、校验以及从发控制等功能。TCP还要控制流量,
31、以避免快速的发送方“淹没”低速的接收方而是接受无法处理。UDP是一个不可靠的、无连接的协议,主要用于不需要TCP的顺序和流量控制能力、而是自己完成这些功能的应用程序。它被广泛的用于端主机和网关以及Internet网络管理中心等的消息通信,以达到控制网管理网络运行的目的,或者应用于快速递送比准确递送更重要的应用程序,例如传输语音或视频图像。(4)应用层位于传输层之上的应用层所包含所有的高层协议,为用户提供所需的服务。主要的服务有;远程登录(Telnet)、用户可以使用异地主机;文件传输(FTP),用户可以在不同的主机之间传送文件;电子邮件(SMTP)用户可以通过主机和终端相互发送信件;Web服务
32、(HTTP),发布和访问具有超文本格式HTML的各种信息;域名系统(DNS),把主机名映射到网络地址。2.2本章小结本章对设计应用到的计算机网络通信的相关知识进行介绍。首先对计算机通信的概念进行阐述,并说明了计算机通信的基本要素。其次说明了计算机通信网的组成及分类,对本设计要用到的局域网基本情况进行了阐述。最后一节为本章重点,对本设计使用的TCP/IP协议模型进行了详细的介绍。第3章Visual C+.NET网络通信编程原理3.1窗口与消息窗口是Windows操作系统中一种非常基本也是非常重要的对象。狭义上讲,窗口是指能进行图形处理的视觉上可见的窗口;而从广义上讲,窗口包括可见或不可见的所有能
33、进行消息处理的单元。而实际上,应用程序创建的这些可接收、处理消息的不可见窗口除了在视觉上不可见外,在消息处理等方面同可视窗口是完全一致的。窗口对象的数据是系统为每个窗口和每个窗口类保存的信息,由Windows分发送给窗口的消息由Windows调用的窗口函数负责处理4。窗口类是定义窗口属性的模板,在创建窗口时,必须通过指定窗口类来确定窗口所具有的属性。这些属性包括:窗口风格、光标、菜单以及窗口处理函数等。Windows虽然提供一些预定义的窗口类,但是绝大多数的应用程序为更好地控制窗口而使用自己定义的窗口类。窗口类是不允许重名的在建立好窗口类后,必须向Windows进行提交注册。所谓窗口类的建立,
34、就是用WNDCLASS结构去定义一个结构变量,然后再用自己约定的窗口属性信息去填充此结构变量的各个域。WNDCLASS结构定义如下: typedef struct_WNDCLASS UINT style; /窗口类风格 WNDPROC lpfnWndProc; /指向窗口处理函数的指针 int cbClsExtra; /窗口类附加数据 int cbWndExtra; /窗口附加数据 HANDLE hInstance; /拥有此窗口的应用程序实例 HICON hIcon; /窗口图标句柄 HCURSOR hCursor; /窗口光标句柄 HBRUSH hbrBackground; /窗口背景画刷
35、句柄 LPCTSTR lpszMenuName; /窗口类菜单名 LPCTSTR lpszClassName; /窗口类名 WNDCLASS;该结构前两个成员变量是其中最为重要的,其中style确定了窗口风格这一重要属性,1pfnWndProc指向了窗口处理函数的地址。此窗口处理函数是一个回调函数,更确切地说应该是一个主回调函数,它承担了Windows和应用程序之间的通信任务。在程序运行期间,所有的窗口函数均是等待Windows系统调用而不是由应用程序直接调用。在窗口类注册时将通过成员1pfnWndProc向Windows系统进行登记,此后就可以在Windows实施相应操作时回调了。在将窗口类
36、结构的各个域赋值完毕后,就可以用指向此窗口类对象的指针作为参数传递给窗口类注册函数RegisterClass( )向Windows注册此窗口类了。RegisterClass ( )函数原型声明为:ATOM RegisterClass(CONST WNDCLASS*lpWndClass);如果注册成功,该函数将返回一个惟一标识此注册类的原子;如果注册失败,将返回0,可以通过GetLastError( )获取引发注册失败的具体原因。虽然Windows应用程序的实质性工作都是在窗口函数中完成的,但是却看不到主程序对各窗口函数的显式调用,这是由于Windows操作系统采用了消息驱动机制。虽然借助于vi
37、sual C+的集成开发环境可以在不了解windows内部运行机制的情况下也能进行程序开发,但是如果要进行更加深入的编程就非常有必要对Windows操作系统的内部运行机制尤其是要对Windows的消息驱动机制有一个清楚的认识。消息是消息驱动机制的核心,是报告某件事情发生的通知。Windows系统下消息的产生有多种途径,可以将其归结为输入消息、控制消息、系统消息与用户消息等四大类。为接收消息,Windows在应用程序执行后将为其创建一个消息队列,此消息队列用来存放发送给程序各窗口的消息,这些消息在发送过程中是通过结构MSG来对其各个元素进行组织的,该结构定义如下: typedef struct
38、tagMSG HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt;MSG;成员hwnd为表示接收消息的窗口句柄;message为发送的消息号;wParam和lParam为消息参数,具体意义同发送的消息有关;time和pt分别为发送消息时的时间和光标位置。将消息传送到应用程序有两种具体的方法,即使用SendMessage( )函数的发送消息方法和使用PostMessage( )函数的邮递消息方法。这两种消息传递方式的目的都是一致的,都是要把消息传递给应用程序,但是这两种消息传递方式在使用时仍存在一
39、些细微的差别。发送消息时,系统不经由消息队列而直接调用窗口函数,并立即将消息发送给应用程序的窗口函数。这种通过发送方式进行传输的消息是一种“不进队消息”,应用程序直到窗口进程为调用函数返回一个结果后才得以继续执行。邮递消息则先把消息放置到应用程序的消息队列中存储起来,应用程序将在空闲的时候搜索消息队列,如果在消息队列中搜索到了消息,将负责把消息发送到既定窗口,是在消息队列中将其删除。这种邮递消息的方式在把消息放入到消息队列后就立即返回,但是返回值只能说明消息是否邮递成功,而并不能表示被调用窗口进程的结果。邮递方式发出的消息属于“进队消息”,通常多为由用户输入而产生的消息5。3.2MFC应用基础
40、MFC,微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C+环境下编写应用程序的一个框架和引擎,Windows环境下开发人员使用的专业C+ SDK,MFC作为与VC+血肉相连的部分,是一个非外挂式的软件包,类仓库,开发平台,这些类是微软为VC+专配的,MFC是 Win API与C+的结合,是一种软件编程的规范。MFC不只是一套微软提供下的一个Win下C+的开发平台,也不只是一个功能单纯的界面开发系统,它提供的类绝大部分用来进行界面开发,关联一个窗口的动作。MFC应用程序框架是以MFC作为框架基础的,以此程序框架模式搭建起来的应用程序自20世纪9
41、0年代初问世以来,MFC一直试图把Windows API函数封装到类库中的各个逻辑类中。MFC的这种封装并非简单地对API函数进行分组与打包,而是更多地通过类来试图实现全部的系统策略。随着越来越多系统功能的加入,MFC的规模也在不断拓展,目前已包括有200多个类,涵盖了通用windows类、文档/视框架、OLE、数据库、Internet和网络类等多方面的内容,尤其是Internet和网络类的使用将可以在很大程度上简化对网络通信类程序的开发。MFC提供了相当多不同功能的类,以适合尽可能广泛的需求。这里绝大多数的MFC类都是直接或间接从CObject类派生出来的,则CObject类为其派生类提供了
42、三个重要的特性支持:持久性(Serialization)支持、运行时(Runtime)类信息支持和诊断(Diagnostic)调试支持等。其中持久性是以流的方式将某个类对象中的持久性数据输出或输入到外部存储介质如磁盘文件等的过程;运行时类的信息(Run-time Class Information,RTCI)则可以重新获取一个对象的类名及其他一些有关对象在运行时的信息。RTCI也是C+针对运行时类型信息(Run-time Type Information,RTTI)机制外的另一个重要工具;诊断和调试支持作为CObject类的一个组成部分,可以在实现CObject派生类时执行有效性检查并可向调试
43、窗口输出状态信息。CObject类是MFC中最主要也是最基本的类之一,该类不支持多重继承,派生的类只能有一个CObject基类。CObject类是位于类层次结构最顶层的,绝大多数MFC类都是从CObject类派生出来的。CObject类包含了所有MFC类必须具备的几个基本功能:持久性支持、运行时类的信息支持和诊断调试支持持久性支持功能由成员函数IsSerializable()和Serialize()提供;前者用于检测对象是否支持序列化。如果一个类能够被序列化,就必须在声明时有DECLARE_SERIAL宏、实现时包含IMPLEMENT_SERIAL宏。在MFC中,CWnd类提供了所有窗口类的基
44、本功能,是一个非常重要的类,大约三分之一的MFC类都是以此为基类。该类主要对创建、操纵窗口类的API函数进行了封装,而且通过消息映射机制隐藏了SDK编程中使用相当不便的窗口处理函数,使消息的分发处理更加方便。Cwnd类最重要的一个封装是对API函数CreateWindow( )的封装,该函数被封装为CWnd类成员函数Create( )。3.3Windows窗体设计窗体是图形用户的基本组成部分,也是VC+.NET可视化程序设计的基础,在应用程序中有着非常重要的位置。对于用户而言,窗体界面就是应用程序,用户感觉不到也不需要知道界面后面的代码,所以应用程序的可用性完全依赖窗体界面。Windows窗体
45、控件是可再次使用的组件,它们封装了用户界面功能,并且可以用于客户端Windows应用程序。Windows窗体不仅提供了许多现成的控件,还提供了自行开发控件的基础结构。可以组合现有的控件、扩展现有控件或创作自己的自定义控件。Windows窗体是制作标准Win32屏幕的一种更高级方法,具有非常健全的功能。.NET Framework中所有的语言都是使用Windows窗体来代替它们的图形窗体所中使用的组件。在.NET环境下,Windows窗体为所有的语言提供了一套丰富的、控件和绘图功能,以及用于图形和绘图底层Windows服务的标准API。Windows窗体实际上是.NET Framework基类的
46、一部分,它使用的命名空间是Systerm:Windows:Forms。在VC+.NET中并没有单独的窗体模块语法,窗体是一个类,所以它不能被隐含加载,既简单的通过以用一个窗体来加载它是无效的,必须创建该窗体在显示它。Windows窗体控件是从Systerm:Windows:Forms:Control直接或间接派生的类。开发Windows常用两种方案。(1)组合现有控件来创作一个复合控件复合控件封装可以作为控件重复使用的用户界面。其中一个示例就是有文本框和重置按钮组成的控件。可视化设计器为创建复合控件提供了有力的支持。要创作派生自Systerm:Windows:Forms:UserControl
47、的复合控件。基类UserControl为子控件提供了键盘路由,并使子控件可以作为一个组进行工作。扩展现有控件,对其进行自定义或为其添加功能。一个不能更改颜色的按钮和一个跟踪点击次数属性的按钮就是扩展控件的示例。可以通过从任何Windows窗体控件派生空间并重写或添加属性、方法和事件的方式自定义Windows窗体控件。(2)创作不是通过组合或扩展现有控件而形成的控件在这种方案中,需从基类Systerm:Windows:Forms:Control派生控件,可以添加和重写基类的属性、方法和事件。Windows窗体控件的基类为客户端Windows应用程序中的外观显示提供了所需的途径。Control在屏幕上定义一个矩形,并提供一个窗口句柄,用来处理消息路由,并提供鼠标和键盘事件以及许多其他用户界面事件。还提供高级布局,并具有用于外观现实的特定属性