windows网络编程基础教程答案(windows网络编程基础教程第二版)

http://www.itjxue.com  2023-02-17 08:58  来源:未知  点击次数: 

计算机网络设计教程(第二版)习题解答陈明

网络工程需求分析完成后,应形成网络工程需求分析报告书,与用户交流、修改,并通过用户方组织的评审。网络工程设计方要根据评审意见,形成可操作和可行性的阶段网络工程需求分析报告。有了网络工程需求分析报告,网络系统方案设计阶段就会“水到渠成”。网络工程设计阶段包括确定网络工程目标与方案设计原则、通信平台规划与设计、资源平台规划与设计、网络通信设备选型、网络服务器与操作系统选型、综合布线网络选型和网络安全设计等内容。

2.1

网络工程目标和设计原则

1.网络工程目标

一般情况下,对网络工程目标要进行总体规划,分步实施。在制定网络工程总目标时应确定采用的网络技术、工程标准、网络规模、网络系统功能结构、网络应用目的和范围。然后,对总体目标进行分解,明确各分期工程的具体目标、网络建设内容、所需工程费用、时间和进度计划等。

对于网络工程应根据工程的种类和目标大小不同,先对网络工程有一个整体规划,然后在确定总体目标,并对目标采用分步实施的策略。一般我们可以将工程分为三步。

1)

建设计算机网络环境平台。

2) 扩大计算机网络环境平台。

3)

进行高层次网络建设。

2.网络工程设计原则

网络信息工程建设目标关系到现在和今后的几年内用户方网络信息化水平和网上应用系统的成败。在工程设计前对主要设计原则进行选择和平衡,并排定其在方案设计中的优先级,对网络工程设计和实施将具有指导意义。

1)

实用、好用与够用性原则

计算机与外设、服务器和网络通信等设备在技术性能逐步提升的同时,其价格却在逐年或逐季下降,不可能也没必要实现所谓“一步到位”。所以,网络方案设计中应采用成熟可靠的技术和设备,充分体现“够用”、“好用”、“实用”建网原则,切不可用“今天”的钱,买“明、后天”才可用得上的设备。

2)

开放性原则

网络系统应采用开放的标准和技术,资源系统建设要采用国家标准,有些还要遵循国际标准(如:财务管理系统、电子商务系统)。其目的包括两个方面:第一,有利于网络工程系统的后期扩充;第二,有利于与外部网络互连互通,切不可“闭门造车”形成信息化孤岛。

3)

可靠性原则

无论是企业还是事业,也无论网络规模大小,网络系统的可靠性是一个工程的生命线。比如,一个网络系统中的关键设备和应用系统,偶尔出现的死锁,对于政府、教育、企业、税务、证券、金融、铁路、民航等行业产生的将是灾难性的事故。因此,应确保网络系统很高的平均无故障时间和尽可能低的平均无故障率。

4)

安全性原则

网络的安全主要是指网络系统防病毒、防黑客等破坏系统、数据可用性、一致性、高效性、可信赖性及可靠性等安全问题。为了网络系统安全,在方案设计时,应考虑用户方在网络安全方面可投入的资金,建议用户方选用网络防火墙、网络防杀毒系统等网络安全设施;网络信息中心对外的服务器要与对内的服务器隔离。

5)

先进性原则

网络系统应采用国际先进、主流、成熟的技术。比如,局域网可采用千兆以太网和全交换以太网技术。视网络规模的大小(比如网络中连接机器的台数在250台以上时),选用多层交换技术,支持多层干道传输、生成树等协议。

6)

易用性原则

网络系统的硬件设备和软件程序应易于安装、管理和维护。各种主要网络设备,比如核心交换机、汇聚交换机、接入交换机、服务器、大功率长延时UPS等设备均要支持流行的网管系统,以方便用户管理、配置网络系统。

7)

可扩展性原则

网络总体设计不仅要考虑到近期目标,也要为网络的进一步发展留有扩展的余地,因此要选用主流产品和技术。若有可能,最好选用同一品牌的产品,或兼容性好的产品。在一个系统中切不可选用技术和性能不兼容的产品。比如,对于多层交换网络,若要选用两种品牌交换机,一定要注意他们的VLAN干道传输、生成树等协议是否兼容,是否可“无缝”连接。这些问题解决了,可扩展性自然是“水到渠成”。

2.2

网络通信平台设计

1.网络拓扑结构

网络的拓扑结构主要是指园区网络的物理拓扑结构,因为如今的局域网技术首选的是交换以太网技术。采用以太网交换机,从物理连接看拓扑结构可以是星型、扩展星型或树型等结构,从逻辑连接看拓扑结构只能是总线结构。对于大中型网络考虑链路传输的可靠性,可采用冗余结构。确立网络的物理拓扑结构是整个网络方案规划的基础,物理拓扑结构的选择往往和地理环境分布、传输介质与距离、网络传输可靠性等因素紧密相关。选择拓扑结构时,应该考虑的主要因素有以下几点。

1)

地理环境:不同的地理环境需要设计不同的物理网络拓扑,不同的网络物理拓扑设计施工安装工程的费用也不同。一般情况下,网络物理拓扑最好选用星型结构,以便于网络通信设备的管理和维护。

2)

传输介质与距离:在设计网络时,考虑到传输介质、距离的远近和可用于网络通信平台的经费投入,网络拓扑结构必须具有在传输介质、通信距离、可投入经费等三者之间权衡。建筑楼之间互连应采用多模或单模光缆。如果两建筑楼间距小于90m,也可以用超五类屏蔽双绞线,但要考虑屏蔽双绞线两端接地问题。

3)

可靠性:网络设备损坏、光缆被挖断、连接器松动等这类故障是有可能发生的,网络拓扑结构设计应避免因个别结点损坏而影响整个网络的正常运行。若经费允许,网络拓扑结构的核心层和汇聚层,最好采用全冗余连接,如图6-1所示。

网络拓扑结构的规划设计与网络规模息息相关。一个规模较小的星型局域网没有汇聚层、接入层之分。规模较大的网络通常为多星型分层拓扑结构,如图6-1所示。主干网络称为核心层,用以连接服务器、建筑群到网络中心,或在一个较大型建筑物内连接多个交换机配线间到网络中心设备间。连接信息点的“毛细血管”线路及网络设备称为接入层,根据需要在中间设置汇聚层。

图6-1

网络全冗余连接星型拓扑结构图

分层设计有助于分配和规划带宽,有利于信息流量的局部化,也就是说全局网络对某个部门的信息访问的需求根少(比如:财务部门的信息,只能在本部门内授权访问),这种情况下部门业务服务器即可放在汇聚层。这样局部的信息流量传输不会波及到全网。

2.主干网络(核心层)设计

主干网技术的选择,要根据以上需求分析中用户方网络规模大小、网上传输信息的种类和用户方可投入的资金等因素来考虑。一般而言,主干网用来连接建筑群和服务器群,可能会容纳网络上50%~80%的信息流,是网络大动脉。连接建筑群的主干网一般以光缆做传输介质,典型的主干网技术主要有100Mbps-FX以太网、l

000Mbps以太网、ATM等。从易用性、先进性和可扩展性的角度考虑,采用百兆、千兆以太网是目前局域网构建的流行做法。

3.汇聚层和接入层设计

汇聚层的存在与否,取决于网络规模的大小。当建筑楼内信息点较多(比如大于22个点)超出一台交换机的端口密度,而不得不增加交换机扩充端口时,就需要有汇聚交换机。交换机间如果采用级连方式,则将一组固定端口交换机上联到一台背板带宽和性能较好的汇聚交换机上,再由汇聚交换机上联到主干网的核心交换机。如果采用多台交换机堆叠方式扩充端口密度,其中一台交换机上联,则网络中就只有接入层。

接入层即直接信息点,通过此信息点将网络资源设备(PC:等)接入网络。汇聚层采用级连还是堆叠,要看网络信息点的分布情况。如果信息点分布均在距交换机为中心的50m半径内,且信息点数已超过一台或两台交换机的容量,则应采用交换机堆叠结构。堆叠能够有充足的带宽保证,适宜汇聚(楼宇内)信息点密集的情况。交换机级连则适用于楼宇内信息点分散,其配线间不能覆盖全楼的信息点,增加汇聚层的同时也会使工程成本提高。

汇聚层、接入层一般采用l00Base-Tx快速变换式以太网,采用10/100Mbps自适应交换到桌面,传输介质是超五类或五类双绞线。Cisco

Catalyst

3500/4000系列交换机就是专门针对中等密度汇聚层而设计的。接入层交换机可选择的产品根多,但要根据应用需求,可选择支持l~2个光端口模块,支持堆叠的接入层变换机。

4.广域网连接与远程访问设计

由于布线系统费用和实现上的限制,对于零散的远程用户接入,利用PSTN电话网络进行远程拨号访问几乎是惟一经济、方便的选择。远程拨号访问需要设计远程访问服务器和Modem设备,并申请一组中继线。由于拨号访问是整个网络中惟一的窄带设备,这一部分在未来的网络中可能会逐步减少使用。远程访问服务器(RAS)和Modem组的端口数目一一对应,一般按一个端口支持20个用户计算来配置。

广域网连接是指园区网络对外的连接通道.一般采用路由器连接外部网络。根据网络规模的大小、网络用户的数量,来选择对外连接通道的带宽。如果网络用户没有www、E-mail等具有internet功能的服务器,用户可以采用ISDN或ADSL等技术连接外网。如果用户有WWW、E-mail等具有internet功能的服务器,用户可采用DDN(或E1)专线连接、ATM交换及永久虚电路连接外网。其连接带宽可根据内外信息流的大小选择,比如上网并发用户数在150~250之问,可以租用2Mbps线路,通过同步口连接Internet。如果用户与网络接入运营商在同一个城市,也可以采用光纤10Mbps/100Mbps的速率连接Internet。外部线路租用费用一般与带宽成正比,速度越快费用越高。网络工程设计方和用户方必须清楚的一点就是,能给用户方提供多大的连接外网的带宽受两个因素的制约,一是用户方租用外连线路的速率,二是用户方共享运营商连接Internet的速率。

5.无线网络设计

无线网络的出现就是为了解决有线网络无法克服的困难。无线网络首先适用于很难布线的地方(比如受保护的建筑物、机场等)或者经常需要变动布线结构的地方(如展览馆等)。学校也是一个很重要的应用领域,一个无线网络系统可以使教师、学生在校园内的任何地方接入网络。另外,因为无线网络支持十几公里的区域,因此对于城市范围的网络接入也能适用,可以设想一个采用无线网络的ISP可以为一个城市的任何角落提供高达10Mbps的互联网接入。

6.网络通信设备选型

1)

网络通信设备选型原则

2)

核心交换机选型策略

3)

汇聚层/接入层交换机选型策略

4)

远程接入与访问设备选型策略

2.3

网络资源平台设计

1.服务器

2.服务器子网连接方案

3.网络应用系统

2.4

网络操作系统与服务器配置

1.网络操作系统选型

目前,网络操作系统产品较多,为网络应用提供了良好的可选择性。操作系统对网络建设的成败至天重要,要依据具体的应用选择操作系统。一般情况下,网络系统集成方在网络工程项目中要完成基础应用平台以下三层(网络层、数据链路层、物理层)的建构。选择什么操作系统,也要看网络系统集成方的工程师以及用户方系统管理员的技术水平和对网络操作系统的使用经验而定。如果在工程实施中选一些大家都比较生疏的服务器和操作系统,有可能使工期延长,不可预见性费用加大,可能还要请外援做系统培训,维护的难度和费用也要增加。

网络操作系统分为两个大类:即面向IA架构PC服务器的操作系统族和UNIX操作系统家族。UNIX服务器品质较高、价格昂贵、装机量少而且可选择性也不高,一般根据应用系统平台的实际需求,估计好费用,瞄准某一两家产品去准备即可。与UNIX服务器相比,Windows

2000 Advanced Server服务器品牌和产品型号可谓“铺天盖地”,

一般在中小型网络中普遍采用。

同一个网络系统中不需要采用同一种网络操作系统,选择中可结合Windows 2000 Advanced

Server、Linux和UNIX的特点,在网络中混合使用。通常WWW、OA及管理信息系统服务器上可采用Windows 2000 Advanced

Server平台,E-mail、DNS、Proxy等Internet应用可使用Linux/UNIX,这样,既可以享受到Windows 2000 Advanced

Server应用丰富、界面直观、使用方便的优点,又可以享受到Linux/UNIX稳定、高效的好处。

2.Windows 2000 Server

服务器配置

首先,应根据需求阶段的调研成果,比如网络规模、客户数量流量、数据库规模、所使用的应用软件的特殊要求等,决定Windows 2000

Advanced Server服务器的档次、配置。例如,服务器若是用于部门的文件打印服务,那么普通单处理器Windows 2000Advanced

Server服务器就可以应付自如;如果是用于小型数据库服务器,那么服务器上至少要有256MB的内存:作为小型数据库服务器或者E-mail、Internet服务器,内存要达到512MB,而且要使用ECC内存。对于中小型企业来说,一般的网络要求是有数十个至数百个用户,使用的数据库规模不大,此时选择部门级服务器。1路至2路CPU、512-1024MB

ECC内存、三个36GB(RAID5)或者五个36GB硬盘(RAID5)可以充分满足网络需求。如果希望以后扩充的余地大一些,或者服务器还要做OA服务器、MIS服务器,网络规模比较大,用户数据量大,那么最好选择企业级服务器,即4路或8路SMP结构,带有热插拔RAID磁盘阵列、冗余风扇和冗余电源的系统。

其次,选择Windows

2000 Advanced Server服务器时,对服务器上几个关键部分的选取一定要把好关。因为Windows 2000 Advanced

Server虽然是兼容性相对不错的操作系统,但兼容并不保证100%可用。Windows 2000 Advanced

Server服务器的内存必须是支持ECC的,如果使用非ECC的内存,SQL数据库等应用就很难保证稳定、正常地运行。Windows 2000 Advanced

server服务器的主要部件(如主板、网卡)一定要是通过了微软Windows 2000 Advanced Server认证的。只有通过了微软Windows

2000 Advanced Server部件认证的产品才能保证其在Windows 2000 Advanced

Server下的100%可用性。另外,就是服务器的电源是否可靠,因为服务器不可能是跑几天歇一歇的。

第三,在升级已有的windows 2000

Advanced Server服务器时.则要仔细分析原有网络服务器的瓶颈所在,此时可简单利用Windows 2000 Advanced

Server系统中集成的软件工具,比如Windows 2000 Advanced

Server系统性能监视器等。查看系统的运行状况,分析系统各部分资源的使用情况。一般来说,可供参考的Windows 2000 Advanced

Server服务器系统升级顺序是扩充服务器内存容量、升级服务器处理器、增加系统的处理器数目。之所以这样是因为,对于Windows 2000 Advanced

Server服务器上的典型应用(如SQL数据库、OA服务器)来说,这些服务占用的系统主要资源开销是内存开销,对处理器的资源开销要求并小多,通过扩充服务器内存容量提高系统的可用内存资源,将大大提高服务器的性能。反过来,由于多处理器系统其本身占用的系统资源开销大大高于单处理器的占用。所以相对来说,增加系统处理器的升级方案,其性价比要比扩充内存容量方案差。因此,要根据网络应用系统实际情况来确定增加服务器处理器的数目,比如网络应用服务器要处理大量的并发访问、复杂的算法、大量的数学模型等。

3.服务器群的综合配置与均衡

我们所谓的PC服务器、UNIX服务器、小型机服务器,其概念主要限于物理服务器(硬件)范畴。在网络资源存储、应用系统集成中。通常将服务器硬件上安装各类应用系统的服务器系统冠以相应的应用系统的名字,如数据库服务器、Web服务器、E-mail服务器等,其概念属于逻辑服务器(软件)范畴。根据网络规模、用户数量和应用密度的需要,有时一台服务器硬件专门运行一种服务,有时一台服务器硬件需安装两种以上的服务程序,有时两台以上的服务器需安装和运行同一种服务系统。也就是说,服务器与其在网络中的职能并不是一一对麻的。网络规模小到只用l至2台服务器的局域网,大到可达十几台至数十台的企业网和校园网,如何根据应用需求、费用承受能力、服务器性能和不同服务程序之间对硬件占用特点、合理搭配和规划服务器配制,最大限度地提高效率和性能的基础上降低成本,是系统集成方要考虑的问题。

有关服务器应用配置与均衡的建议如下。

1)

中小型网络服务器应用配置

2)

中型网络服务器应用配置

3)

大中型网络或ISP/ICP的服务器群配置

2.5

网络安全设计

网络安全体系设计的重点在于根据安全设计的基本原则,制定出网络各层次的安全策略和措施,然后确定出选用什么样的网络安全系统产品。

1.网络安全设计原则

尽管没有绝对安全的网络,但是,如果在网络方案设计之初就遵从一些安全原则,那么网络系统的安全就会有保障。设计时如不全面考虑,消极地将安全和保密措施寄托在网管阶段,这种事后“打补丁”的思路是相当危险的。从工程技术角度出发,在设计网络方案时,应该遵守以下原则。

1)

网络安全前期防范

强调对信息系统全面地进行安全保护。大家都知道“木桶的最大容积取决于最短的一块木板”,此道理对网络安全来说也是有效的。网络信息系统是一个复杂的计算机系统,它本身在物理上、操作上和管理上的种种漏洞构成了系统的安全脆弱性,尤其是多用户网络系统自身的复杂性、资源共享性,使单纯的技术保护防不胜防。攻击者使用的是“最易渗透性”,自然在系统中最薄弱的地方进行攻击。因此,充分、全面、完整地对系统的安全漏洞和安全威胁进行分析、评估和检测(包括模拟攻击),是设计网络安全系统的必要前提条件。

2)

网络安全在线保护

强调安全防护、监测和应急恢复。要求在网络发生被攻击、破坏的情况下,必须尽可能快地恢复网络信息系统的服务。减少损失。所以,网络安全系统应该包括3种机制:安全防护机制、安全监测机制、安全恢复机制。安全防护机制是根据具体系统存在的各种安全漏洞和安全威胁采取的相应防护措施,避免非法攻击的进行:安全监测机制是监测系统的运行,及时发现和制止对系统进行的各种攻击;安全恢复机制是在安全防护机制失效的情况下,进行应急处理和及时地恢复信息,减少攻击的破坏程度。

3)

网络安全有效性与实用性

网络安全应以不能影响系统的正常运行和合法用户方的操作活动为前提。网络中的信息安全和信息应用是一对矛盾。一方面,为健全和弥补系统缺陷的漏洞,会采取多种技术手段和管理措施:另一方面,势必给系统的运行和用户方的使用造成负担和麻烦,“越安全就意味着使用越不方便”。尤其在网络环境下,实时性要求很高的业务不能容忍安全连接和安全处理造成的时延。网络安全采用分布式监控、集中式管理。

4)

网络安全等级划分与管理

良好的网络安全系统必然是分为不同级别的,包括对信息保密程度分级(绝密、机密、秘密、普密),对用户操作权限分级(面向个人及面向群组),对网络安全程度分级(安全子网和安全区域),对系统结构层分级(应用层、网络层、链路层等)的安全策略。针对不同级别的安全对象,提供全面的、可选的安全算法和安全体制,以满足网络中不同层次的各种实际需求。

网络总体设计时要考虑安全系统的设计。避免因考虑不周,出了问题之后“拆东墙补西墙”的做法。避免造成经济上的巨大损失,避免对国家、集体和个人造成无法挽回的损失。由于安全与保密问题是一个相当复杂的问题。因此必须注重网络安全管理。要安全策略到设备、安全责任到人、安全机制贯穿整个网络系统,这样才能保证网络的安全性。

5)

网络安全经济实用

网络系统的设计是受经费限制的。因此在考虑安全问题解决方案时必须考虑性能价格的平衡,而且不同的网络系统所要求的安全侧重点各不相同。一般园区网络要具有身份认证、网络行为审计、网络容错、防黑客、防病毒等功能。网络安全产品实用、好用、够用即可。

2.网络信息安全设计与实施步骤

第一步、确定面临的各种攻击和风险。

第二步、确定安全策略。

安全策略是网络安全系统设计的目标和原则,是对应用系统完整的安全解决方案。安全策略的制定要综合以下几方面的情况。

(1)

系统整体安全性,由应用环境和用户方需求决定,包括各个安全机制的子系统的安全目标和性能指标。

(2)

对原系统的运行造成的负荷和影响(如网络通信时延、数据扩展等)。

(3) 便于网络管理人员进行控制、管理和配置。

(4)

可扩展的编程接口,便于更新和升级。

(5) 用户方界面的友好性和使用方便性。

(6)

投资总额和工程时间等。

第三步、建立安全模型。

模型的建立可以使复杂的问题简化,更好地解决和安全策略有关的问题。安全模型包括网络安全系统的各个子系统。网络安全系统的设计和实现可以分为安全体制、网络安全连接和网络安全传输三部分。

(1)

安全体制:包括安全算法库、安全信息库和用户方接口界面。

(2) 网络安全连接:包括安全协议和网络通信接口模块。

(3)

网络安全传输:包括网络安全管理系统、网络安全支撑系统和网络安全传输系统。

第四步、选择并实现安全服务。

(1)

物理层的安争:物理层信息安全主要防止物理通路的损坏、物理通路的窃听和对物理通路的攻击(干扰等)。

(2)

链路层的安全:链路层的网络安全需要保证通过网络链路传送的数据不被窃听。主要采用划分VLAN(局域网)、加密通信(远程网)等手段。

(3)网络层的安全:网络层的安全需要保证网络只给授权的客户使用授权的服务,保证网络传输正确,避免被拦截或监听。

(4)

操作系统的安全:操作系统安全要求保证客户资料、操作系统访问控制的安令,同时能够对该操作系统上的应用进行审计。

(5)

应用平台的安全:应用平台指建立在网络系统之上的应用软件服务,如数据库服务器,电子邮件服务器,Web服务器等。由于应用平台的系统非常复杂,通常采用多种技术(如SSL等)来增强应用平台的安全性。

(6)

应用系统的安全:应用系统是为用户提供服务,应用系统的安全与系统设计和实现关系密切。应用系统使用应用平台提供的安全服务来保证基本安全,如通信内容安全、通信双方的认证和审计等手段。

第五步、安全产品的选型

网络安全产品主要包括防火墙、用户身份认证、网络防病系统统等。安全产品的选型工作要严格按照企业(学校)信息与网络系统安全产品的功能规范要求,利用综合的技术手段,对产品功能、性能与可用性等方面进行测试,为企业、学校选出符合功能要求的安全产品。

一个完整的设计方案,应包括以下基本内容:

1.设计总说明

对系统工程起动的背景进行简要的说明:主要包括:

(1)

技术的普及与应用

(2)

业主发展的需要(对需求分析书进行概括)

2.设计总则

在这一部分阐述整个系统设计的总体原则。主要包括:

(1)

系统设计思想

(2) 总体目标

(3)

所遵循的标准

3.技术方案设计

对所采用的技术进行详细说明,给出全面的技术方案。主要包括:

(1) 整体设计概要

(2)

设计思想与设计原则

(3) 综合布线系统设计

(4) 网络系统设计

(5) 网络应用系统平台设计

(6)

服务器系统安全策略

4.预算

对整个系统项目进行预算。主要内容包括:列出整个系统的设备、材料用量表及费用;成本分析;以综合单价法给出整个系统的预算表。

5.项目实施管理

对整个项目的实施进行管理控制的方法。主要包括:

(1)

项目实施组织构架及管理

(2) 奖惩体系

(3) 施工方案

(4) 技术措施方案

(5) 项目进度计划

有《Windows网络编程案例教程》的pdf和源代码吗?可以分享给我吗?谢谢!

书名=Windows网络编程案例教程

作者=董相志编著

页码=415

ISBN=978-7-302-34489-6

出版社=北京:清华大学出版社 , 2014.01

附件已经上传

句柄是一个什么类型的值?

句柄是一种特殊的智能指针。

句柄,是整个Windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序能够通过句柄访问相应的对象的信息,但是句柄不是一个指针,程序不能利用句柄来直接阅读文件中的信息。如果句柄不在I/O文件中,它是毫无用处的。

句柄是Windows用来标志应用程序中建立的或是使用的唯一整数,Windows使用了大量的句柄来标识很多对象。

项目包括:

*.模块(module)

*.任务(task)

*.实例(instance)

*.文件(file)

*.内存块(block of memory)

*.菜单(menu)

*.控件(control)

*.字体(font)

*.资源(resource),包括图标(icon),光标(cursor),字符串(string)等

*.GDI对象(GDI

object),包括位图(bitmap),画刷(brush),元文件(metafile),调色板(palette),画笔(pen),区域(region),以及设备描述表(device

context)。

语句:

HINSTANCE hInstance;

可以改成:

HANDLE hInstance;

上面的2条语句都是对的,表达的是一个意义。

一个WINDOWS应用程序可以用不同的方法获得一个特定项的句柄。许多API函数,诸如CreateWindow,GlobalAlloc,OpenFile的返回值都是一个句柄值。另外,WINDOWS也能通过应用程序的引出函数将一个句柄作为参数传送给应用程序,应用程序一旦获得了一个确定项的句柄,便可在WINDOWS环境下的任何地方对这个句柄进行操作。其实句柄的大量使用已经影响到了每一个WINDOWS的程序设计。

一个句柄,只有当唯一地确定了一个项目的时候,它才开始有意义。句柄对应着项目表中的一项,而只有WINDOWS本身才能直接存取这个表,应用程序只能通过API函数来处理不同的句柄。举个例子来说吧,比如:我们可以为我们的应用程序申请一块内存块,通过调用API函数GlobalAlloc,来返回一个句柄值:

hMem=GlobalAlloc(......);

现在的hMem是个索引值

不是物理地址,应用程序还不能直接存取这块内存。这儿还有一句题外话,是关于操作系统的内存管理的。一般情况下操作系统给应用程序分配的内存块都是可以被移动的或者是可以丢弃的,这样能使有限的内存资源得到充分利用。所以,我们刚开始分配到的那块内存的地址是不确定的,因为它是可以被移动的,所以得先锁定那块内存块,这里应用程序需要调用API函数GlobalLock函数来锁定句柄。如下:

lpMem=GlobalLock(hMem);

这样应用程序才能存取这块内存。

作用:

句柄是一个标识符,是拿来标识对象或者项目的。

如果想更透彻一点地认识句柄,我可以告诉大家,句柄类似指向指针的指针,仅仅是类似,通过句柄可以找到对应的数据,但是不是二级指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是驻留在内存中的。简单地理解,似乎我们只要获知这个内存的首地址,就可以随时用这个地址访问对象了。如果您真的这样认为,那您可就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,以此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找那一个对象呢?

为了解决这个问题,Windows操作系统为全体应用程序腾出一些内存单元,用来专门登记各应用程序的对象在内存中的地址的变化,而前者的物理地址在系统运行期间是始终保持不变的。Windows内存管理器移动了对象在内存中的位置后,会把该对象新的地址及时地告知给对应的句柄进行更新。这样我们只要知道这个句柄,就可以间接地知道对象具体在内存中的哪个位置了。这个地址是在对象装载(Load)时由系统分配给的,当对象卸载时(Unload)又释放给系统。

谁能提供点C语言的试题给我,最好能有答案的,非常感谢!

本试卷共5页共5大题,考生在作答前应先检查是否有缺页、白页、以防漏答。查对无误后,请先填写学号、姓名、专业,再答卷。

一、单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。(共10小题,每小题2分,共20分)。

1、不是C语言基本数据类型的是( )。

A、指针类型 B、整型

C、字符型 D、实型

2、设有:int a=3, b= 4, c= 5,x , y; 表达式(x=a)(y=b)0的值为( )。

A、1 B、0 C、3 D、4

3、设有语句 int a=3 ; 则执行了语句 a+ = a - = a后,变量a 的值是( )。

A、3 B、0 C、9 D、-12

4、执行以下程序后,y的值是( )

main()

{ int a[]={2,4,6,8,10};

int y=0,i,*p;

p=a[0];

for(i=0;i5;x++)

y+=*(p+i);

printf(“%d\n”,y);

}

A、17 B、18 C、19 D、30

5、有定义语句:float a[4];则分配给数组a的空间为( )字节。

A、 20 B、 12 C、 16 C、10

6、以下描述错误的是( )。

A、break语句可用于do~while语句

B、break语句和continue语句的作用是一样的

C、在循环语句中使用break语句是为了跳出循环,提前结束循环

D、在循环语句中使用continue语句是为了结束本次循环,而不终止整个循环

7、C语言中规定,if语句的嵌套结构中,else总是( )。

A、与最近的if 配对 B、与第一个if 配对

C、按缩进位置相同的if配对 D、与最近的且尚未配对的if 配对

8、说明语句“int (*p)( ); ”的含义是( ) 。

A、p是一个指向一维数组的指针变量

B、p是指针变量,指向一个整型数据

C、p是一个指向函数的指针,该函数返回一个int型数据

D、以上都不对

9、以下对二维数组c的正确声明是 ( ) 。

A、int c[3][ ]; B、int c(3,4); C、int c(2)(2); D、int c[3][2];

10、下述程序段执行后输出结果是( )。

int x=100, y=200;

printf ("% d", (x, y));

A、100 B、200 C、100,200 D、编译出错

二、填空题。(共10空,每空1分,共10分 )

1、C语言提供的三种逻辑运算符是 、 || 和!;

2、函数的返回值是通过函数中的 return 语句获得的。

3、在"int a[ ][3]={{1},{3,2},{4,5,6},{0}};"定义后,a[2][2]的值为_6__ _;

4、对于"int *pa[5];" pa是一个具有5个元素的_数组指针_,每个元素是一个指向int型变量的__指针__;

5、单向链表的尾节点next指针应赋值__ NULL___;

6、for(int x=0,y=1;xy〈=5;y++)中循环体执行的次数是 0 。

7、int a[5];数组a的首地址为2000,则元素a[1]的地址为 2002 ,元素a[2]的地址为 2004 。

三、程序填空题。(共8空,每空2分,共16分 )

1、以下程序中子函数返回数组s中最大元素,数组中元素的个数由t传入。

Int findmax(int s[],int t)

{

int m,n,*p;

max=0;

p= s ;

for(n=1;nt;n++)

if(*(p+max)*(p+n)) max=n ;

return(*(p+max));;

}

Void main( )

{ int a[10];

int i;

for(i=0;i10;i+=)

scanf(“%d”,a[i]);

printf(“%d”,findmax{a,10});

}

2、以下程序完成计算1-1/2+1/3-1/4+..前n 项和的功能,请填空。

#include stdio.h

int main( )

{ int i, n, flag;

float sum;

scanf("%d", n);

flag= 1 ;

sum=0;

for(i=1;i=n; i++ )

{ sum+=(float)flag/i;

flag=-flag ;

}

printf("%.3f\n", sum);

}

3、以下程序的功能是从键盘输入n个整数,统计其中正数、0、负数的个数,请填空。

#include stdio.h

int main( )

{int a, i, count1,count2,count3;

count1=cout2=count3=0 ;

for(i=1;i=n;i++)

{ scanf(“%d”, a);

If(a0) count1++;

Else if(i==0) count2++ ;

Else count3++;

}

printf(“正数:d个,零:%d个,负数:%d个\n”, count1,count2,count3);

}

四、运行程序结果。(共4小题,每小题6分,共24分)

1、运行时输入100,200,请写出程序运行结果。

Void main( )

{

int a, b,*p1,*p2 ;

scanf ( " % d ", a , );

scanf ( " % d ", b );

printf(“a=%d,b=%d”,a,b);

p1=a; p2=b;

swap ( p1,p2);

printf(“a=%d,b=%d”,a,b);

}

Void swap ( int *p1, *p2)

{

int t ;

t=*p1; *p1=*p2; *p2=t;

}

运行结果为:

a=100,b=200a=200,b=100

2、运行时若输入1 2 3 4 -5回车,写出程序运行结果。

#include stdio.h

int main( )

{

int x, sum;

scanf("%d", x);

sum=0;

while(x0)

{ if(x%2!=0) sum+=x;

scanf("%d", x);

}

printf("sum=%d\n", sum);

}

运行结果为:

sum=4

3、写出程序运行结果。

#includestdio.h

int max(int a,int b)

{ int c;

c=ab?a:b;

return(c);

}

int min(int a,int b)

{int c;

c=ab?a:b;

return(c);

}

void main()

{ int a=2,b=6;

printf("max=%d\n",max(a,b));

printf(“min=%d\n”,min(a,b));

}

运行结果为:

max=6

Min=2

4、运行时若输入4 1 2 3 0回车,写出程序运行结果。

#include stdio.h

int main( )

{

int i, index, n;

int a[10];

scanf("%d", n);

for(i=0; in; i++)

scanf("%d", a[i]);

index=0;

for(i=1;in;i++)

{ if(a[i]a[index]) index=i; }

printf("min=%d,index=%d\n", a[index],index);

}

运行结果为:

min=0,index=3

五、程序设计.( 共3小题,每小题10分,共30分)

1、输入10个字符串,将其按由小到大排序。

#includestdio.h

#includestring.h

Void main( )

{ char c[10][20],t[10];

Int I, j,k;

For(i=0;i10;i++)

Gets(c[i]);

For(i=0;i9;i++)

{ k=I;

For(j=i+1;j10;j++)

If(strcmp(c[k],c[j])0) k=j;

If(k!=i) { strcpy(t,c[k]); strcpy(c[k],c[i]); strcpy(c[i],t); }

For(i=0;i10;i++)

Puts(c[i]);

}

2、求出1!+2!+3!+…+8!。

#includestdio.h

Float fact(int n)

{ float f;

If(n==1||n==0) f=1;

Else f=fact(n-1)*n;

Return(f);

}

Void main( )

{float sum;

Int I;

Sum=0;

For(i=1;i=8;i++)

Sum+=fact(i);

Printf(“sum=%d\n”,sum);

}

3、请写出在一个单向链表中插入一个结点的函数:

struct student *insert(struct student *head, struct student *stud)

(说明:链表结点有两个成员:数据成员data和指针成员next)。

#include stdio.h

#include malloc.h

#define NULL 0

#define LEN sizeof(struct student)

struct student

{ int data;

struct student *next;

};

int n;

struct student *insert(struct student *head, struct student *stud)

{struct student *p0,*p1,*p2;

p1=head;p0=stud; if(head==NULL)

{head=p0; p0-next=NULL;}

else{while((p0-datap1-data) (p1-next!=NULL))

{p2=p1; p1=p1-next;}

if(p0-data=p1-data) {if(head==p1) head=p0;

else p2-next=p0; p0-next=p1;}

else {p1-next=p0; p0-next=NULL;}}

n=n+1; return(head);

}

如何学习网络编程

具体到编程,用java来实现网络编程是很容易的,可以作为网络编程的入门。使用C++和winsock相对复杂一些。总之看实际需要了。 你好初学网络编程者可以从以下几个步骤开展:1)下载一个可以互动的学习工具,通过这个与这个工具互动,我们可以及时的学到每个api的结果如果。我个人强烈推荐一个互动好工具,即python,下载地址

对于有c/c++或java基础的朋友通过一两个礼拜的时间就可以上手了,另外个人建议初学者可以学习dive into python。2)掌握网络编程中会用到的几个基本概念和内涵,比如IP地址,port号,socket等3)记住和消化网络编程C/S模型,把server和client端编程的常用模式理解和消化4)花几天时间学习socket api集,api集可以分为下面几大类:创建 socket bind listen accept收发 read/recv/recvfrom write/send/sendto关闭 close shutdown参数 getsockopt/setsockopt地址 gethostbyaddr getaddrbyhost,...在学习这些api时候,可以先关注在函数功能,参数意义上5)结合python互动平台,实践socket api的用法,比如socket函数怎么使用,bind怎么使用等等。在互动过程中,我们可以变换参数,看看调用结果如何。比如,创建一个tcp socket的语法如下:socket(AF_INET,SOCK_STREAM)创建一个udp socket的语法如下:socket(AF_INET,SOCK_DGRAM)6)学习socket server端编程实现简单规约比如echo,time等,然后通过cmd中的telnet来测试。7)学习I/O模型,比如阻塞、非阻塞和反应式(select,poll,WaitForMultipleObject)等8)学习Richard Stevens的《Unix网络编程》,深入学习其中的api原理以及服务端设计原理,并通过代码编写。9)下载高性能网络编程框架twisted,笔者强烈推荐,它将使你的网络编程效率提高10倍以上。10)学习设计模式、操作系统知识比如线程、进程、同步等。邻家阿呆 回答采纳率:29.0% 2008-12-18 09:55检举我是高手,我可以教你1.明确学习目的学习编程对大多数IT业人员来说都是非常有用的。学编程,做一名编程人员,从个人角度讲,可以解决在软件使用中所遇到的问题,改进现有软件,可以为自己找到一份理想的工作添加重要得砝码,有利于在求职道路上谋得一个好的职位;从国家的角度,可以为中国的软件产业做出应有的贡献,一名优秀的程序员永远是被争夺的对象。学习编程还能 锻炼思维,使我们的逻辑思维更加严密;能够不断享受到创新的乐趣,将一直有机会走在高科技的前沿,因为程序设计本身是一种创造性的工作。知识经济时代给我们带来了无限的机会,要想真正掌握计算机技术,并在IT行业里干出一番事业来,有所作为,具有一定的编程能力是一个基本条件和要求。2.打好基础学编程要具备一定的基础,总结之有以下几方面:(1)数学基础 从计算机发展和应用的历史来看计算机的数学模型和体系结构等都是有数学家提出的,最早的计算机也是为数值计算而设计的。因此,要学好计算机就要有一定的数学基础,出学者有高中水平就差不多了。(2)逻辑思维能力的培养 学程序设计要有一定的逻辑思维能力,“逻思力”的培养要长时间的实践锻炼。要想成为一名优秀的程序员,最重要的是掌握编程思想。要做到这一点必须在反复的实践、观察、分析、比较、总结中逐渐地积累。因此在学习编程过程中,我们不必等到什么都完全明白了才去动手实践,只要明白了大概,就要敢于自己动手去体验。谁都有第一次。有些问题只有通过实践后才能明白,也只有实践才能把老师和书上的知识变成自己的,高手都是这样成材的。

(责任编辑:IT教学网)

更多

推荐其他营销文章