




已阅读5页,还剩60页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计(论文)局域网点对点通信系统设计摘要所谓网络中的点对点通信是实现网络上不同计算机之间,不经过任何中继设备而直接交换数据或服务的一种技术。由于允许网络中任何一台计算机可以直接连到网络中的其他计算机,并与之进行数据交换,这样既可以消除中间环节,也使得网络上的沟通变得更加容易、更加直接。本文介绍的是一种使用WINSOCK编程技术,基于TCP/IP协议的、面向连接的流式套接字网络通信程序设计。本文首先介绍了计算机通信网的基础理论,主要介绍了计算机通信网的组成、通信协议和TCP/IP模型。其次,详细阐述了VISUALCNET网络通信编程知识,其中重点介绍了窗体设计和WINDOWSSOCKET。最后给出了利用VC中WINSOCK控件编写的服务端、客户端通信程序的基本思路,及部分程序。关键词点对点;TCP/IP;SOCKETABSTRACTPEERTOPEERCOMMUNICATIONISACOMPUTERCOMMUNICATIONMETHODWHICHISUSEDINDIFFERENTCOMPUTERSTOTRANSMITDATAORSERVICESDIRECTLY,WITHOUTOTHERDEVICEASTHENETWORKALLOWSANYCOMPUTERCONNECTTOOTHERCOMPUTERDIRECTLYANDEXCHANGEDATAWITHEACHOTHER,ITELIMINATESINTERMEDIATELINKS,MAKECOMMUNICATIONMUCHEASIER,MOREDIRECTLYTHEPAPERINTRODUCESMETHODTHROUGHWINSOCKPROGRAM,BASEDONTCP/IPANDFACECONNECTWASSETUPATFIRST,THEPAPERINTRODUCESTHEBASETHEORYOFCOMPUTERCOMMUNICATION,INCLUDETHECOMPOSITIONOFCOMPUTERCOMMUNICATIONNETWORK,COMMUNICATIONPROTOCOLANDTCP/IPMODELSECONDLY,ELABORATETHECOMMUNICATIONTHEORYOFVISUALCNET,WHICHFOCUSESONWINDOWSSOCKETANDFORMSDESIGNINTHEEND,WEGIVETHEBASICTHOUGHTSOFSEVERANDCLIENTTRANSLATEDPROGRAMMADEBYWINSOCKCONTROLLERBYVCKEYWORDSPEERTOPEER;TCP/IP;SOCKET;目录摘要IABSTRACTII目录III第1章绪论111课题背景1111P2P技术的国内外现状1112P2P技术的研究成果及发展趋势2113P2P技术所存在的问题312本文主要研究内容4第2章计算机通信基础及相关原理521计算机通信网通信原理5211计算机通信的概念5212计算机通信网的组成及网络结构6213TCP/IP协议模型722本章小结9第3章VISUALCNET网络通信编程原理1031窗口与消息1032MFC应用基础1233WINDOWS窗体设计1334WINDOWSSOCKET概念及编程机理15341WINDOWSSOCKETS套接字及分类15342套接字函数1635本章小结20第4章软件程序设计2141程序流程框图2142主要程序及功能22421TCPSOCKET类的封装22422对话框添加相应控件26423对话框初始化32424发送和接收数据线程3443本章小结35结论36参考文献37致谢38附录1I附录2IV附录3IX第1章绪论11课题背景111P2P技术的国内外现状目前计算机通信最常用的方法主要是串口通信,USB通信和网络通信。随着网络技术的发展,网络通信发挥着越来越重要的作用,这是因为计算机网络容易组建与扩展,一个简单的局域网的组建只需要HUB,网卡,网线和几台计算机即可。因此利用网络技术在局域网上实现通信,具有很强的实用性。在网络通信中应用最广泛,最热门的技术就是P2P。P2P的英文全称是PEERTOPEER,可以理解为点对点的意思,或称为对等网络计算机,通俗的讲就是端到端1。当对等计算机在客户机/服务器模式下作为客户机进行操作时,它还包含另外一层可使其具有服务器功能的软件。对等计算机可对其他计算机的要求进行响应。请求和响应范围和方式都根据具体应用程序不同而不同。P2P可以简单地定义为通过直接交换共享计算机资源和服务,不同PC用户之间不经过中继设备直接交换数据或服务的技术,它允许互联网用户直接使用对方的文件,使得网络上的沟通变得容易、更直接,真正地消除了中间商。每个人可以直接连接到其他用户的计算机交换文件,而不是像过去那样连接到服务器去浏览与下载。NAPSTER是最早出现的P2P系统之一。NAPSTER实质上并非是纯粹的P2P系统,它通过一个中央服务器保存所有NAPSTER用户上传的音乐文件索引和存放位置的信息。当某个用户需要某个音乐文件时,首先连接到NAPSTER服务器,在服务器进行检索,并由服务器返回存有该文件的用户信息;再由请求者直接连到文件的所有者传输文件。NAPSTER首先实现了文件查询与文件传输的分离,有效地节省了中央服务器的带宽消耗,减少了系统的文件传输延时目前,INTERNET上P2P应用软件层出不穷,如BT、迅雷、PPLIVE、SNS等,P2P软件用户数量从几十万、几百万到上千万不等,并且还在急剧增加。P2P计算技术在军事领域、商业领域、政府信息和通讯等领域也得到了广泛的应用,使得各领域的信息交换更加方便,从而提高了信息的流通速度,提高了各领域运作效率。112P2P技术的研究成果及发展趋势P2P系统最大的特点就是用户之间直接共享资源,其核心技术就是分布式对象的定位机制,这也是提高网络可扩展性、解决网络带宽被吞噬的关键所在。为了解决对象定位等关键技术,P2P网络出现了多种网络模型,每种模型都有各自的优缺点,有的还存在着本身难以克服的缺陷,因此在目前P2P技术还远未成熟的阶段,各种网络结构依然能够共存,甚至呈现相互借鉴的态势2。1集中目录式结构集中目录式P2P结构是最早出现的P2P应用模式,因为仍然具有中心化的特点也被称为非纯粹的P2P结构。用于共享MP3音乐文件的NAPSTER是其中最典型的代表,其用户注册与文件检索过程类似于传统的C/S模式,区别在于所有资料并非存储在服务器上,而是存贮在各个节点中。2纯P2P网络模型纯P2P模式也被称作广播式的P2P模型。它取消了集中的中央服务器,每个用户随机接入网络,并与自己相邻的一组邻居节点通过端到端连接构成一个逻辑覆盖的网络。对等节点之间的内容查询和内容共享都是直接通过相邻节点广播接力传递,同时每个节点还会记录搜索轨迹,以防止搜索环路的产生。3混合式网络模型KAZAA是混合模型的典型代表,它在纯P2P分布式模型基础上引入了超级节点的概念,综合了集中式P2P快速查找和纯P2P去中心化的优势。KAZAA模型按节点计算能力、内存大小、连接带宽、网络滞留时间等不同,为将节点分为普通节点和搜索节点两类。4结构化网络模型所谓结构化与非结构化模型的根本区别在于每个节点所维护的邻居是否能够按照某种全局方式组织起来以利于快速查找。结构化P2P模式是一种采用纯分布式的消息传递机制和根据关键字进行查找的定位服务,目前的主流方法是采用分布式哈希表DHT技术,这也是目前扩展性最好的P2P路由方式之一。基于DHT的代表性的研究项目主要包括加州大学伯克利分校的CAN项目和TAPESTRY项目,麻省理工学院的CHORD项目、IRIS项目,微软研究院的PASTRY项目、中国科技大学的PPOCEAN项目等。这些系统一般都假定节点具有相同的能力,这对于规模较小的系统较为有效。但这种假设并不适合大规模的INTERNET部署。同时基于DHT的拓扑维护和修复算法也比GNUTELLA模型和KAZAA模型等无结构的系统要复杂得多,甚至在CHORD项目中产生了“绕路”的问题。事实上,目前大量实际应用还大都是基于无结构的拓扑和泛洪广播机制,现在大多采用DHT方式的P2P系统缺乏在INTERNET中大规模真实部署的实例,成功应用还比较少见。在今后的发展中,在P2P技术上实现数据存取安全、路由安全、用户身份认证和身份管理都需要进一步研究,实现P2P应用之间的统一资源定位,统一路由。使得P2P技术有一个统一开发标准,将能够融合P2P技术,提升整体性能3。113P2P技术所存在的问题伴随着P2P的发展,也随之产生了一些技术性的问题和社会性的问题。这些问题具有普遍性,并可能在很多情况下发生。1P2P的网络拓扑结构的研究拓扑结构是指分布式系统中各个计算单元之间的物理或逻辑的互联关系,节点之间的拓扑结构一直是确定系统类型的重要依据,目前互连网络中广泛使用集中式、层次式等拓扑结构,INTERNET本身是世界上最大的非集中式的互联网络,但是九十年代所建立的一些网络应用系统却是完全的集中式的系统、很多WEB应用都是运行在集中式的服务器系统上。集中式拓扑结构系统目前面临着过量存储负载、DOS攻击等一些难以解决的问题。层次式拓扑结构是一种应用比较广泛的分布式拓扑结构,DNS系统是其最典型的应用。P2P系统一般要构造一个非集中式的拓扑结构,在构造过程中需要解决系统中所包含的大量节点如何命名、组织以及确定节点的加入、离开方式、出错恢复等问题。2P2P网络的支撑技术INTERNET技术的发展使得连入互联网络中的设备不再局限于计算机,在P2P的计算环境中要求任何设备都可以在任何地点很容易的加入到这个环境中,所谓的计算设备既包括有线设备也包括无线设备,这样就需要很多很多网络传输的支撑技术来支持各种不同设备连入整个P2P网络。3带宽问题由于许多P2P应用程序同时运行客户端和服务器端的应用程序,所以它对上行带宽和下行带宽都要占用,而且很多P2P应用使用了洪泛式(FLOODING)的查询技术,这就会导致大量的广播消息充斥整个网络,增加网络流量。这对大多数提供非对称带宽通道的ISP来说,如果不进行专门的配置就很难适应P2P程序的运行。4黑客和病毒入侵问题当使用P2P时,验证共享文件来源是否安全是非常困难的。P2P共享软件存在着两方面的安全隐患黑客和病毒。P2P共享软件常被攻击者选择作为传递恶意代码的载体。由于在P2P网络中,每个节点御防黑客和病毒攻击能力是不同的,因此只要有一个节点遭到攻击,就可以通过内部共享和通信机制将攻击扩散到附近的邻居节点,在短时间内可以造成网络拥塞甚至瘫痪,甚至通过网络攻击者可以完全控制整个网络。因此,黑客和病毒的潜在危机对P2P系统安全性和健壮性提出了更高的要求,需要对P2P应用来源和P2P用户进行授权控制。5敏感信息的泄漏问题当使用P2P传输信息时,P2P软件几乎都设定使用者只能传输特定数据夹中的信息,但如果遭到恶意代码的攻击,就可能门户大开,在不知不觉中会给其他用户访问他人敏感信息的访问权限,这样可能造成有意图的人或公司入侵给人、公司或国家的敏感信息,如获取用户的电脑系统资料、个人信息、银行卡的用户名和密码、公司客户往来信息、国家机密等,因此需要考虑如何保护用户的安全策略。6知识产权问题因为在P2P网络中没有一个统一管理的机制来对网络中的各个用户进行认证和授权管理,P2P网络中的内容都是分散的,随着P2P共享软件的繁荣加速了盗版媒体的分发,增加了知识产权保护的难度。12本文主要研究内容网络中的点对点是实现网络上不同计算机之间,不经过中继设备直接交换数据或服务的一种技术。由于允许网络中任何一台计算机可以直接连到网络中其他计算机,并与之进行数据交换,这样既可以消除中间环节,也使得网络上的沟通变得更加容易、更加直接。本设计使用VISUALCNET语言,应用SOCKET类编程技术来实现局域网的点对点通信;在第二章主要介绍了计算机通信网的基础知识,如什么是计算机通信,计算机通信网的概念、组成和通信协议,重点是TCP/IP模型;第三章介绍编程软件VISUALCNET以及本设计用到的相关知识,主要是SOCKET套接字及其函数;在第四章给出主要程序和整个程序的流程图。第2章计算机通信基础及相关原理21计算机通信网通信原理211计算机通信的概念计算机通信是有两个主要的技术领域发展演而变来的,一是计算机技术,另一个是通信技术。计算机与通信的相互结合主要有两个方面。一方面,网络通信为计算机之间的数据传递和交换提供了必要的手段;另一方面,数字计算技术的发展渗透到通信技术中,又提高了通信网络的各种性能。为了协同工作的目的,在两台或多台“自治的”计算机之间经由数据通路(包括通信网络)进行信息交换,通常称作计算机通信。关于“自治”,可以理解为如果一台计算机能够强迫启动、关闭或控制另一台计算机,则它们不是自治计算机。所谓的计算机通信网是指能够互换信息且独立自主的计算机及通信子网的集合,可以形式化地描述为计算机通信网是计算机主机、通信子网和通信协议的集合。计算机的通信子系统是核心要素,它包括了计算机的通信功能。通信子系统的功能之一是决定数据接收/发送方式、数据的封装/拆卸、传输速率等,从而将不同类型的数据转换为双方都能认可的形式,这项功能是面向应用进程的。通信子系统的另一个更重要的功能是面向网络的,它为信息的传输确定了合适的数据通路或网络路径,包括通路的建立、维护和撤销、无差错传输数据(差错控制),网络中路由选择与速率匹配(流量控制),以及网络之间的互联等。我们将通信子系统之间对应的信息交换互称为计算机到计算机的通信。数据通信系统为计算机之间的信息交换提供了传输媒介,并提供可靠的数据传输能力。数据通信系统既可以是单条的直接传输通路(如双绞线、同轴电缆、光线或无线信道),也可以是互连的多条的传输通路,即网络通信。应用进程的作用是为用户提供网络服务,更多的依赖于用户业务。应用进程之间的通信称为用户到用户的通信。在应用进程与通信子系统之间必须提供相应的接口,其作用类似于操作系统中的系统调用功能。基于以上对计算机通信网要素的分析,将计算机通信网按照其功能划分为信息交换和信息处理两部分,及相应由通信子网和资源子网两部分组成。通信子网负责数据的无差错和有序传递,包括通信处理器、集中器、路由器、网桥等设备,传输媒介可以是电话线路、有线电缆(包括数据传输电缆、有线电视信号传输电缆等)、光线、无线、微波、卫星等,其处理功能包括差错控制、流量控制、路由选择、网络互联等。资源子网是计算机通信的本地系统环境,包括主机、终端和应用程序等。资源子网的功能是用户资源配置、数据的处理和管理、软件和硬件共享以及负载的均衡等。还包括一个合适的接口,以保证主机能无缝的接入一个通信子网。212计算机通信网的组成及网络结构从计算机通信网的物理组成来看,网络的组成元素可以分为网络节点和网络链路两部分。网络节点又分为端节点和交换节点两种,端节点是指源或宿节点,例如用户主机或用户终端;交换节点指网络通信过程中起控制、暂存和转发信息作用的节点。例如程控交换机、集中器、路由器、网桥等。端节点是用户数据的发源地和归宿地,而交换节点本身不向用户提供新的数据,只是对用户数据进行搬运和转移。通信链路是指传输信息的通路,即通信子网中的传输媒介,其作用是在机器之间传送比特。因此,通信子网主要由交换节点和通信链路组成,而资源子网中主要包括拥有资源的用户主机和需求资源的用户终端,它们都是端节点。所以,计算机通信网就是一个由通信子网承载的、传输和共享资源子网的和各类信息的系统。所谓网络的拓扑结构是指通信子网中的交换节点的互连模式。按拓扑结构进行划分,网络可以集中式和分布式两种基本类型。在集中网络内,所有信息都必须经过一个中央处理设备(即交换节点)。通信链路都是从中央节点向外辐射,这个中心节点的可靠性基本上决定了整个网络的可靠性,集中式网络又成为星型网。分布式通信子网又称为格状网,即其中任何一个节点都可以和若干个节点直接相连,在分组交换的情况下,即使某个节点或某条链路出现故障,用户发送的数据流也可以经过不同的路径到达目的地,因此分布式网络可靠性较高。局域网(LAN)是处于一个建筑物、同一大院或方圆数公里地域内的专用网络。局域网常被用来来接办公室或大学里的个人计算机和工作站,以便共享资源和交换信息。LAN与其他网络相比具有三个不同特征范围、传输技术、拓扑网络。LAN的覆盖范围比较小,这意味着即使在最坏的情况下起传输时间也是有限的,并且可以预先知道传输的最大时间。这就简化了网络的设计和网络的管理。LAN中使用的传输技术使用一条电缆连接多有机器。传统的LAN速度为10兆比特每秒100兆比特每秒,传输延时较短(数十个毫秒),并且出错率低。LAN的拓扑结构通常采用广播式网络,其中常用的是总线型和环形结构。在广播式LAN中,任意时刻只有一台机器是主站并可以进行数据发送,而其他的机器则不能发送,若要两个或更多机器都想发送信息时,则现需要冲突机制来解决冲突。IEEE8023标准,就是通常所称的以太网,就是一种居于总线的局域网,它使用分布式控制,速度为10兆比特每秒或100兆比特每秒。IEEE8025标准(IBM令牌环)定义了常见的基于环形的LAN,其速度为千兆比特每秒。典型的,每个比特环绕一周的时间仅相当于发出几个比特的时间,常常小于整个分组的传输时间。213TCP/IP协议模型通信协议是指相互通信的双方(或多方)对如何进行信息交换所一致同意的一整套规则。通信协议的各种类型可以分为以下几种。面向应用的协议为完成某些特定应用的而制定的协议。从分层的协议结构来看,包括应用层的专用服务元素,例如TCP/IP模型中的FTP、TELNET、SMTP等。面向应用的协议也可以称为进程到进程协议。系统到系统协议支持系统中特定的应用进程间的数据交换,为应用进程提供网络通信服务,包括应用层的公共服务元素、表示层协议等。端到端的协议完成端到端的可靠传输,建立、保持以及维护端到端的连接,包括会话层协议、TCP和UDP。点到点协议实现直接相连的节点之间的数据传输,如数据链路层协议HDLC和INTERNET中的PPP协议等。网络接入协议如介质接入控制(MAC)等。网间互联协议从网络介质的延伸,不同网络用户的寻址,到异构网络及按协议的转换。其他网内协议包括流量控制、寻址和路由控制等。TCP/IP模型起源于1969年美国国防部赞助研究的网络ARPANET世界上第一个采用分组交换技术的计算机通信网。1982年开发了一簇新的协议,其中最重要的就是TCP和IP,IP协议用来给不同的通信子网或局域网提供一个统一的互连平台。TCP协议则是用来为应用程序提供端到端通信和控制功能。这个结构体系成为TCP/IP协议模型。TCP/IP模型包括两个协议传输控制协议(TCP)和网络传输协议(IP),两者都是非基于任何特定硬件平台的网络协议,既可以用于局域网又可以用于广域网。TCP/IP协议模型从更实用的角度出发,形成了具有高效率的四层体系结构,即主机网络层、网络互联层(IP层)、传输层和应用层。1主机网络层该层中使用的协议大多数是各通信子网的固有协议,例如以太网8023协议、令牌环网8025协议或分组交换网X25协议等。主机网络层的作用是传输经网络互联层处理过的信息,并提供一个主机与实际网络的接口,而具体的接口关系则可以有实际网络的类型所决定。2网络互连层(IP层)它的功能是使主机可以把分组发往任何网络,并使个分组独立传向目的地(中途可能经有不同网络),这称为数据包方式的信息传送。这些分组到达的顺序可能和发送的顺序不同,应此需要按顺序发送和接收时,高层必须对分组排序。分组路由和拥塞控制是IP层设计的主要问题。网络互联层所使用的协议是IP协议。它把传输层送来的消息装成数据报文,并把IP数据报文传递给主机网络层。IP协议提供统一的IP数据包格式,以消除各通信子网的差异,从而为信息的发送方和接收方提供透明的传输通道。网络传输层的主要任务是为IP数据报文分配一个全网唯一的数据地址,实现IP数据的识别与管理;IP数据报路由机制;发送或接收时IP数据报的长度和通信子网所要求的数据包长度匹配。3传输层传输层位应用进程提供了端到端通信功能。该层协议处理网络互联层没有处理的问题,保证通信连接的可靠性,能够自动适应网络的各种变换。传输层主要有两个协议,即传输控制协议(TCP协议)和用户数据包协议(UDP)。TCP协议是面向连接的,以建立高可靠性信息传输连接为目的,它负责把用户数据按一定的格式和长度组成多个数据报进行发送,并在接受到数据后按分解顺序从新组装和恢复数据。TCP协议与任何特定网络的特征相独立,对分组没有太多的限制,单一般TCP的实现均以网络中可以承载的适当大小座位数据单元的长度,最大长度为65千字节,很大的分组将在IP层进行分割后传输。为例完成可靠的数据传输任务,TCP协议具有数据报的顺序控制、差错检测、校验以及从发控制等功能。TCP还要控制流量,以避免快速的发送方“淹没”低速的接收方而是接受无法处理。UDP是一个不可靠的、无连接的协议,主要用于不需要TCP的顺序和流量控制能力、而是自己完成这些功能的应用程序。它被广泛的用于端主机和网关以及INTERNET网络管理中心等的消息通信,以达到控制网管理网络运行的目的,或者应用于快速递送比准确递送更重要的应用程序,例如传输语音或视频图像。4应用层位于传输层之上的应用层所包含所有的高层协议,为用户提供所需的服务。主要的服务有;远程登录(TELNET)、用户可以使用异地主机;文件传输(FTP),用户可以在不同的主机之间传送文件;电子邮件(SMTP)用户可以通过主机和终端相互发送信件;WEB服务(HTTP),发布和访问具有超文本格式HTML的各种信息;域名系统(DNS),把主机名映射到网络地址。22本章小结本章对设计应用到的计算机网络通信的相关知识进行介绍。首先对计算机通信的概念进行阐述,并说明了计算机通信的基本要素。其次说明了计算机通信网的组成及分类,对本设计要用到的局域网基本情况进行了阐述。最后一节为本章重点,对本设计使用的TCP/IP协议模型进行了详细的介绍。第3章VISUALCNET网络通信编程原理31窗口与消息窗口是WINDOWS操作系统中一种非常基本也是非常重要的对象。狭义上讲,窗口是指能进行图形处理的视觉上可见的窗口;而从广义上讲,窗口包括可见或不可见的所有能进行消息处理的单元。而实际上,应用程序创建的这些可接收、处理消息的不可见窗口除了在视觉上不可见外,在消息处理等方面同可视窗口是完全一致的。窗口对象的数据是系统为每个窗口和每个窗口类保存的信息,由WINDOWS分发送给窗口的消息由WINDOWS调用的窗口函数负责处理4。窗口类是定义窗口属性的模板,在创建窗口时,必须通过指定窗口类来确定窗口所具有的属性。这些属性包括窗口风格、光标、菜单以及窗口处理函数等。WINDOWS虽然提供一些预定义的窗口类,但是绝大多数的应用程序为更好地控制窗口而使用自己定义的窗口类。窗口类是不允许重名的在建立好窗口类后,必须向WINDOWS进行提交注册。所谓窗口类的建立,就是用WNDCLASS结构去定义一个结构变量,然后再用自己约定的窗口属性信息去填充此结构变量的各个域。WNDCLASS结构定义如下TYPEDEFSTRUCT_WNDCLASSUINTSTYLE/窗口类风格WNDPROCLPFNWNDPROC/指向窗口处理函数的指针INTCBCLSEXTRA/窗口类附加数据INTCBWNDEXTRA/窗口附加数据HANDLEHINSTANCE/拥有此窗口的应用程序实例HICONHICON/窗口图标句柄HCURSORHCURSOR/窗口光标句柄HBRUSHHBRBACKGROUND/窗口背景画刷句柄LPCTSTRLPSZMENUNAME/窗口类菜单名LPCTSTRLPSZCLASSNAME/窗口类名WNDCLASS该结构前两个成员变量是其中最为重要的,其中STYLE确定了窗口风格这一重要属性,1PFNWNDPROC指向了窗口处理函数的地址。此窗口处理函数是一个回调函数,更确切地说应该是一个主回调函数,它承担了WINDOWS和应用程序之间的通信任务。在程序运行期间,所有的窗口函数均是等待WINDOWS系统调用而不是由应用程序直接调用。在窗口类注册时将通过成员1PFNWNDPROC向WINDOWS系统进行登记,此后就可以在WINDOWS实施相应操作时回调了。在将窗口类结构的各个域赋值完毕后,就可以用指向此窗口类对象的指针作为参数传递给窗口类注册函数REGISTERCLASS向WINDOWS注册此窗口类了。REGISTERCLASS函数原型声明为ATOMREGISTERCLASS(CONSTWNDCLASSLPWNDCLASS);如果注册成功,该函数将返回一个惟一标识此注册类的原子;如果注册失败,将返回0,可以通过GETLASTERROR获取引发注册失败的具体原因。虽然WINDOWS应用程序的实质性工作都是在窗口函数中完成的,但是却看不到主程序对各窗口函数的显式调用,这是由于WINDOWS操作系统采用了消息驱动机制。虽然借助于VISUALC的集成开发环境可以在不了解WINDOWS内部运行机制的情况下也能进行程序开发,但是如果要进行更加深入的编程就非常有必要对WINDOWS操作系统的内部运行机制尤其是要对WINDOWS的消息驱动机制有一个清楚的认识。消息是消息驱动机制的核心,是报告某件事情发生的通知。WINDOWS系统下消息的产生有多种途径,可以将其归结为输入消息、控制消息、系统消息与用户消息等四大类。为接收消息,WINDOWS在应用程序执行后将为其创建一个消息队列,此消息队列用来存放发送给程序各窗口的消息,这些消息在发送过程中是通过结构MSG来对其各个元素进行组织的,该结构定义如下TYPEDEFSTRUCTTAGMSGHWNDHWNDUINTMESSAGEWPARAMWPARAMLPARAMLPARAMDWORDTIMEPOINTPTMSG成员HWND为表示接收消息的窗口句柄;MESSAGE为发送的消息号;WPARAM和LPARAM为消息参数,具体意义同发送的消息有关;TIME和PT分别为发送消息时的时间和光标位置。将消息传送到应用程序有两种具体的方法,即使用SENDMESSAGE函数的发送消息方法和使用POSTMESSAGE函数的邮递消息方法。这两种消息传递方式的目的都是一致的,都是要把消息传递给应用程序,但是这两种消息传递方式在使用时仍存在一些细微的差别。发送消息时,系统不经由消息队列而直接调用窗口函数,并立即将消息发送给应用程序的窗口函数。这种通过发送方式进行传输的消息是一种“不进队消息”,应用程序直到窗口进程为调用函数返回一个结果后才得以继续执行。邮递消息则先把消息放置到应用程序的消息队列中存储起来,应用程序将在空闲的时候搜索消息队列,如果在消息队列中搜索到了消息,将负责把消息发送到既定窗口,是在消息队列中将其删除。这种邮递消息的方式在把消息放入到消息队列后就立即返回,但是返回值只能说明消息是否邮递成功,而并不能表示被调用窗口进程的结果。邮递方式发出的消息属于“进队消息”,通常多为由用户输入而产生的消息5。32MFC应用基础MFC,微软基础类MICROSOFTFOUNDATIONCLASSES,实际上是微软提供的,用于在C环境下编写应用程序的一个框架和引擎,WINDOWS环境下开发人员使用的专业CSDK,MFC作为与VC血肉相连的部分,是一个非外挂式的软件包,类仓库,开发平台,这些类是微软为VC专配的,MFC是WINAPI与C的结合,是一种软件编程的规范。MFC不只是一套微软提供下的一个WIN下C的开发平台,也不只是一个功能单纯的界面开发系统,它提供的类绝大部分用来进行界面开发,关联一个窗口的动作。MFC应用程序框架是以MFC作为框架基础的,以此程序框架模式搭建起来的应用程序自20世纪90年代初问世以来,MFC一直试图把WINDOWSAPI函数封装到类库中的各个逻辑类中。MFC的这种封装并非简单地对API函数进行分组与打包,而是更多地通过类来试图实现全部的系统策略。随着越来越多系统功能的加入,MFC的规模也在不断拓展,目前已包括有200多个类,涵盖了通用WINDOWS类、文档/视框架、OLE、数据库、INTERNET和网络类等多方面的内容,尤其是INTERNET和网络类的使用将可以在很大程度上简化对网络通信类程序的开发。MFC提供了相当多不同功能的类,以适合尽可能广泛的需求。这里绝大多数的MFC类都是直接或间接从COBJECT类派生出来的,则COBJECT类为其派生类提供了三个重要的特性支持持久性SERIALIZATION支持、运行时RUNTIME类信息支持和诊断DIAGNOSTIC调试支持等。其中持久性是以流的方式将某个类对象中的持久性数据输出或输入到外部存储介质如磁盘文件等的过程;运行时类的信息RUNTIMECLASSINFORMATION,RTCI则可以重新获取一个对象的类名及其他一些有关对象在运行时的信息。RTCI也是C针对运行时类型信息RUNTIMETYPEINFORMATION,RTTI机制外的另一个重要工具;诊断和调试支持作为COBJECT类的一个组成部分,可以在实现COBJECT派生类时执行有效性检查并可向调试窗口输出状态信息。COBJECT类是MFC中最主要也是最基本的类之一,该类不支持多重继承,派生的类只能有一个COBJECT基类。COBJECT类是位于类层次结构最顶层的,绝大多数MFC类都是从COBJECT类派生出来的。COBJECT类包含了所有MFC类必须具备的几个基本功能持久性支持、运行时类的信息支持和诊断调试支持持久性支持功能由成员函数ISSERIALIZABLE和SERIALIZE提供;前者用于检测对象是否支持序列化。如果一个类能够被序列化,就必须在声明时有DECLARE_SERIAL宏、实现时包含IMPLEMENT_SERIAL宏。在MFC中,CWND类提供了所有窗口类的基本功能,是一个非常重要的类,大约三分之一的MFC类都是以此为基类。该类主要对创建、操纵窗口类的API函数进行了封装,而且通过消息映射机制隐藏了SDK编程中使用相当不便的窗口处理函数,使消息的分发处理更加方便。CWND类最重要的一个封装是对API函数CREATEWINDOW的封装,该函数被封装为CWND类成员函数CREATE。33WINDOWS窗体设计窗体是图形用户的基本组成部分,也是VCNET可视化程序设计的基础,在应用程序中有着非常重要的位置。对于用户而言,窗体界面就是应用程序,用户感觉不到也不需要知道界面后面的代码,所以应用程序的可用性完全依赖窗体界面。WINDOWS窗体控件是可再次使用的组件,它们封装了用户界面功能,并且可以用于客户端WINDOWS应用程序。WINDOWS窗体不仅提供了许多现成的控件,还提供了自行开发控件的基础结构。可以组合现有的控件、扩展现有控件或创作自己的自定义控件。WINDOWS窗体是制作标准WIN32屏幕的一种更高级方法,具有非常健全的功能。NETFRAMEWORK中所有的语言都是使用WINDOWS窗体来代替它们的图形窗体所中使用的组件。在NET环境下,WINDOWS窗体为所有的语言提供了一套丰富的、控件和绘图功能,以及用于图形和绘图底层WINDOWS服务的标准API。WINDOWS窗体实际上是NETFRAMEWORK基类的一部分,它使用的命名空间是SYSTERMWINDOWSFORMS。在VCNET中并没有单独的窗体模块语法,窗体是一个类,所以它不能被隐含加载,既简单的通过以用一个窗体来加载它是无效的,必须创建该窗体在显示它。WINDOWS窗体控件是从SYSTERMWINDOWSFORMSCONTROL直接或间接派生的类。开发WINDOWS常用两种方案。1组合现有控件来创作一个复合控件复合控件封装可以作为控件重复使用的用户界面。其中一个示例就是有文本框和重置按钮组成的控件。可视化设计器为创建复合控件提供了有力的支持。要创作派生自SYSTERMWINDOWSFORMSUSERCONTROL的复合控件。基类USERCONTROL为子控件提供了键盘路由,并使子控件可以作为一个组进行工作。扩展现有控件,对其进行自定义或为其添加功能。一个不能更改颜色的按钮和一个跟踪点击次数属性的按钮就是扩展控件的示例。可以通过从任何WINDOWS窗体控件派生空间并重写或添加属性、方法和事件的方式自定义WINDOWS窗体控件。2创作不是通过组合或扩展现有控件而形成的控件在这种方案中,需从基类SYSTERMWINDOWSFORMSCONTROL派生控件,可以添加和重写基类的属性、方法和事件。WINDOWS窗体控件的基类为客户端WINDOWS应用程序中的外观显示提供了所需的途径。CONTROL在屏幕上定义一个矩形,并提供一个窗口句柄,用来处理消息路由,并提供鼠标和键盘事件以及许多其他用户界面事件。还提供高级布局,并具有用于外观现实的特定属性,如FORECOLOR、BACKCOLOR、HEIGHT、WIDTH和许多其他属性。此外它还提供了安全性、线程支持以及ACTIVEX控件交互性。由于基类提供了很多基础结构,使得开发WINDOWS窗体控件变得相对简单。最重要的两个类是FORM和USERCONTROL,所有标准的WINDOWS窗体都是从FORM类继承的,所有窗体控件都是继承自USERCONTROL类。34WINDOWSSOCKET概念及编程机理WINDOWSSOCKETS规范以加里弗尼亚大学伯克利分校的伯克利软件发部BSD为基础定义了一套基于WINDOWS的网络编程接口。该接口在包括了UNIX程序员所熟悉的伯克利套接字风格的库函数同时也提供了WINDOWS所持有的扩展库函数,使程序员能够使用WINDOWS系统的消息驱动机制。WINDOWSSOCKETS规范的目的在于提供一个供程序员编程使用,由多个网络软件供应者实现的单一应用程序编程界面。此外,该规范还在一个特定版本的WINDOWS基础上定义了一个用WINDOWSSOCKETSAPI编写应用程序的二进制接口,使应用程序能基于任何网络软件供应者的符合WINDOWSSOCKETS协议的实现上正常运行。因此,本规范定义了程序员能够使用并可由网络软件供应者实现的一套库函数调用及相关语义。遵守WINDOWSSOCKETS规范的网络软件即称之为WINDOWSSOCKETS兼容的。而WINDOWSSOCKETS兼容接口的提供者则被称为WINDOWSSOCKETS提供者。要与WINDOWSSOCKETS兼容,网络软件提供者必须百分之百地实现此WINDOWSSOCKETS规范。凡是能与WINDOWSSOCKETS兼容实现协同工作的应用程序即被认为是具有WINDOWSSOCKETS接口的,这种应用程序即为WINDOWSSOCKETS应用程序。WINDOWSSOCKETS规范定义并说明了结合INTERNET协议族IPS,一般指的是TCP/IP的API的使用,而且所有的WINDOWSSOCKETS实现都支持流式TCP套接字和数据报UDP套接字。应用程序通过调用WINDOWSSOCKETS的API实现相互之间的通信。而WINDOWSSOCKETS又利用下层的网络通信协议功能和操作系统调用完成具体的通信工作。341WINDOWSSOCKETS套接字及分类根据ANADVANCED43BSDINTERPROCESSCOMMUNICATIONTUTORIAL文档中的定义,套接字(SOCKET)是网络通信的基本构件模块,它实际是一个可以关联名字的通信端点。所用的每一个套接字都有它的类型及与其相关的进程。套接字在通信领域中存在。所谓的通信域是通过套接字通信的线程的一些公共特征的抽象。套接字通常仅在一个域中交换数据。WINDOWSSOCKETS规范支持单一的通信域INTERNET域,可以用于INTERNET协议族的进程的通信,在规范的更高版本中还包括了其他一些域。套接字根据对用户可见的通信特性机型分类。只要通信协议支持,就可以在不同类型的套接字上进行通信,尽管如此,应用进程更多的还是在相同的套接字之间进行通信。TCP/IP的SOCKET提供下列三种类型的套接字。一种是流式套接字SOCKET_STREAM,它提供了一个面向连接,可靠的数据传输服务,数据无差错,无重复的发送且按发送顺序接收。内设流量控制,避免数据流超限;数据被看作是字节流,无长度限制。FTP协议即采用流式套接字。另一种是数据报式套接字SOCKET_DGRAM,它提供了一个无连接服务。数据包以独立包形式被发送,不提供无错保证,数据可能丢失或重复,并且接收顺序无序。网络文件系统NFS使用数据报式套接字。最后一种是原始式套接字SOCKET_RAW,该接口允许对较低层次协议,如IP、ICMP直接访问。常用于检验新的协议实现或访问现有服务中配置的新设备。342套接字函数1SOCKET函数功能是创建一个新的套接字。其函数原型为SOCKETPASCALFARSOCKETINTAF,INTTYPE,INTPROTOCOL;参数AF为地址格式说明,目前仅支持PF_INET这一种地址格式(ARPAINTERNET地址格式)。参数TYPE为新的套接字的类型说明。PROTOCOL为用于该套接字的一个特定协议,允许将此参数设置为0而不指定协议。SOCKET函数将根据指定的地址族、数据类型和协议来分配一个套接字描述符及其所用的资源。若未指定协议PROTOCOL参数为0,则使用默认连接方式。对于使用一个给定地址族的某一特定的套接字,则只支持一种协议。但也可以给定如AFUNSPEC未说明的的地址族。这样将需要指定协议参数。使用的协议号对于进行通信的通信域是特定的。支持SOCK_STREAM和SOCK_DGRAM两种类型的描述。其中,SOCK_STREAM类型的套接字将以带外数据传输机制提供有序、可靠、双向、基于联接的字节流。对INTERNET地址族使用TCP协议。而SOCK_DGRAM类型的套接字支持数据报,是一种无联接、最大长度固定一般较小的不可靠的数据缓冲。对INTERNET地址族使用UDP协议。SOCK_STREAM类型的流式套接字是全双工字节流。在接收或发送数据之前,其必须处于已连接状态。一个到其他套接字的连接用CONNECT函数调用创建。一旦建立了连接,就可以通过SEND和RECV函数进行数据传输。在会话结束时,调用CLOSESOCKET关闭套接字。实现SOCK_STREAM的通信协议将会保证数据不丢失或重复。如果对端协议有缓冲区空间,而数据在一个适当的时间内无法成功传输,则连接即被认为中断。后续的调用将以WASETIMEDOUT的出错代码返回失败。SOCK_DGRAM类型的数据报套接字允许使用SENDTO和RECVFROM与任意对等端发送相接收数据报。如果这样的套接字通过CONNECT连接到一个特定的对等端,则可以通过调用SEND或RECV与该对等端进行数据报的发送与接收。如果函数成功执行,SOCKET将返回一个引用新的套接字的描述符。否则将返回IN_VALID_SOCKET,可调用WSAGETLASTERROR获取具体的出错代码。2BIND函数本函数的功能是将套接字地址与所创建的套接字号联系起来。函数原型为INTPASCALFARBINDSOCKETS,CONSTSTRUCTSOCKADDRFARNAME,INTNAMELEN其中,S为表示一未捆绑套接字的描述符。参数NAME为该套接字所指派的地址,并由最后的参数NAMELEN指出了NAME名字的长度。SOCKADDR结构的定义STRUCTSOCKADDRU_SHORT_FAMILYCHARSA_DATA14本函数适用于无连接的数据报或流式套接字,在CONNECT或LISTEN函数调用之前被调用。在SOCKET函数创建了了一个套接字之后,它便存在于一个名字空间(地址族)中,但没有指定名称。通过给一个未命名套接字分派一个本地名来为套接字建立本地绑定(主机地址/端口号)。3LISTEN函数侦听某一指定套接字上的连接请求的到来。函数原型为INTPASCALFARLISTENSOCKETS,INTBACKLOG参数S表示了一个已绑定但尚未连接的套接字。参数BACKLOG指出挂起连接的队列可达到的最大长度。为接受连接,首先用SOCKET创建一个套接字,到来连接的累积数由LISTEN函数规定。然后便可用ACCEPT接受连接了。LISTEN函数仅适用于支持连接的流式套接宇。套接字S被设置为一种“被动”的模式,即负责响应到来的连接,并由进程将到来的连接排队挂起。ACCEPT函数非常适用于同时有多个连接请求的服务器,如果在一个连接请求到达且队列已满,客户端将收到一个WSAECONNREFUSED错误。在没有可用的描述符时,LISTEN仍将试图正常工作下去,并继续接受请求直至队列变空;在有描述符变为可用时,后续的一次1LISTEN或ACCEPT调用将会把队列按照当前或最近的累积数重新进行填充,如果有可能,将继续侦听申请进人的连接请求。4CONNECT函数该函数用于创建与指定外部端口的连接。其函数原型INTPASCALFARCONNECTSOCKETS,CONSTSTRUCTSOCKADDRFARNAME,INTNAMELEN参数S制定一个未连接的数据报或流式套接字。如果套接字尚未绑定,则系统将给本地关联指定一个唯一的值,并设置套接字状态为已绑定。如果名字结构中的地址域全为零,CONNECT将返回WSAEADDRNOTAVAIL错误。对于流式套接字,将启动一个到使用名字的远程主机的活动连接一旦套接字调用成功,通过此套接字即可收发数据。对于数据报套接字,则设置一个默认的目的地址,并用其来进行后续的SEND与RECV调用。如果没有错误发生,则CONNECT函数返回0否则将返回SOCKET_ERROR错误,应用程序可通过WSAGETLASTERROR来获取相应的错误代码。如果对于非阻塞套接字使用上述方法而得到错误代码WSAEWOULDBLOCK。那么应用程序将可以调用SELECT检查套接字是否可写,并以此来确定连接请求是否完成。如果在应用程序中使用的是基于消息的WSAASYNSELECT指出关心连接的事件。则在连接操作完成后,将会收到一个FD_CONNECT消息。5ACCEPT函数响应连接请求,并创建一个新的套接字,原套接字返回侦听状态。这个函数的函数原型为SOCKETPASCALFARACCEPT(SOCKETS,STRUCTSOCKADDRFARADDR,INTFARADDRLEN)参数S为套接字描述符,此套接字调用了LISTEN函数后开始侦听连接。ADDR是一个可选的指向一个缓冲区的指针,可以几首通信层连接实体的地址。地址参数格式取决于创建套接字时所使用的地址组。组后的参数ADDRLEN也是一个可选的指针,该指针指向一个存有ADDR地址长度的整型数。如果函数成功执行,将返回一个SOCKET类型的值,该值是收到报文的一个描述符。否则返回INVALID_SOCKET错误。另外,参数ADDRLEN所指向的整数在调用前包含了ADDR域所指的缓冲区长度,在函数返回时则包含了实际返回地址的字节长度。ACCEPT函数将从在S套接字
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 关+于媒介体育畸变困境下的媒体自律
- 公司安装日常管理制度
- 公司等级划分管理制度
- 公司网银付款管理制度
- 公司舆情监测管理制度
- 公司资本运作管理制度
- 风管工人安全交底-浪潮-2022.7
- 二次配管开槽及管线敷设安全技术交底
- 2025股权投资合同范本 适用于企业投资协议
- 广西壮族自治区百色市2023−2024学年高一下册7月期末教学质量调研测试数学试卷附解析
- 校园农场制度
- 餐厅小票打印模板
- 商场电路施工方案
- 脑疝急救流程图
- 中医适宜技术之中药热奄包的课件
- 单体液压支柱检修工艺及标准
- 中建医院抗浮锚杆施工方案
- 工贸企业重大事故隐患判定标准培训PPT
- 某院检验科仪器设备档案
- 起重设备维护保养记录(完整版)
- 北京市医药卫生科技促进中心关于印发《首都医学科技创新成果转化优促计划实施方案(试行)的通知》
评论
0/150
提交评论