本书以前导课程(计算机网络原理、程序设计语言和数据结构)为基础,有针对性地讲授网络应用程序的设计与开发方法及技术,介绍必要的理论知识,强调网络应用程序设计的实践环节。从计算机操作系统的角度看,开发网络应用程序有三个可供使用的应用编程接口(API):应用组件API、套接字API和硬件设备API。本书重点介绍基于前两个API来开发网络应用程序,其中,第1章到第12章讲解基于ASP.NET的程序设计,第13章到第17章讲解基于Socket的程序设计。教师在授课时可以根据课程要求、教学学时、学生的专业方向和就业需求的具体情况进行相应的取舍。
本书强调网络编程的实用性,重点培养学生的网络编程能力,坚持理论和知识点为提高学生实践动手能力服务的原则,在讲述基本的理论之后,辅以大量的由易到难的实例,使学生“知其然”,也“知其所以然”,促使他们更多地思考和创新,循序渐进地提高网络应用程序的设计和编程能力。
授课教师可联系 “教学支持联系人”获取电子教案,读者也可以从机工新阅读网站下载本书的源代码。
无
计算机网络教学改革势在必行
我国高校的计算机网络教学可以说是从研读Andrew STanenbaum所著的《计算机网络》(第1版)起步的。30年多来,计算机网络的教学环境已经发生了翻天覆地的变化:计算机网络走出了科学家的象牙塔,走向了人类社会生活的方方面面,走进了寻常百姓家;计算机网络课程从只由少数专家研究变成了各高校普遍开设的一门专业基础课程,从研究生课堂走向了本科生、大专生的课堂;学习该课程的专业从通信和计算机专业扩展到了信息技术(IT)相关的许多专业;学习计算机网络知识的目的不再仅限于研究,而是为了获取职业技能,甚至是获取现代社会的基本生活技能;社会对计算机网络的需求也越来越具体,越来越多样化;教学条件从纸上谈兵转变为能够在因特网上或实验室中进行实地实验;优秀的网络教材不断推出,教学方法也从开放系统互联的七层结构的自下而上变成了因特网的五层结构的自顶向下……另一方面,由于计算机网络技术的飞速发展,可作为教学内容的知识不断增加。面对这一系列变化,我们认为计算机网络教学也应当进行相应的改革。
目前,我国高校各个专业的各个教学层次都用同一种(类)教材,都在学习同一门“计算机网络”课程,这种现状是否会导致计算机网络教学的内容存在过于宽泛、针对性不强的问题,已经不能满足计算机网络教学的现实需要了呢?我们可以反思一下:通过短短的60学时,要求学生既要搞清复杂的网络原理,又要学会网络编程;既要能够配置、操作各种网络应用服务器,又能够设计、实施网络系统;既要通晓网络安全原理,又要掌握网络管理的技能,这种美好的愿望是否具有可行性呢?事实说明,这种教学方式由于教学时间的限制往往造成学生囫囵吞枣:网络原理没有深入搞清,网络编程只会皮毛,网络应用一知半解,网络技能略知一二……
事实上,不同的专业对于计算机网络知识有不同的要求。有些专业要求对网络进行一般性了解,而有些专业则要求深入掌握网络的各个方面知识;有些专业要求掌握网络软件编程技能,而有些专业则要求设计实现各种规模的网络系统。
上述教学实践都在提示我们应当对计算机网络包括的知识内容进行认真梳理和归纳分类,再根据不同专业的需求,设计有针对性的网络课程体系。
计算机网络课程群
计算机网络课程是一门公认较难学好的课程,其具有的实践性、应用性、复杂性强等特点在现阶段愈发凸现出来。究其原因,首先是计算机网络本身就是通信与计算机交叉的学科,它要求学生具有较宽广和深入的知识结构与基础。其次是计算机网络领域发展速度极快,因此相关知识和教学内容更新速度也很快。通过选用国内外优秀教材,不断改革教学方法和教师的不懈努力基本上能够应对。第三是网络实验教学目前尚处于探索阶段,国内外高校在教学思路、教材选择、实验设备配备等方面仍是仁者见仁、智者见智。
多年来,根据社会对计算机网络的需求以及在教学实践中总结出的规律,并与多所国内著名高校讲授网络课程的老师及网络产业界的精英们探讨后,我们将原来的一门计算机网络课程拓展为计算机网络课程群,该课程群包括如下六门课程:计算机网络原理、互联网应用与维护、网络应用编程、网络安全、网络工程设计和网络管理。
“计算机网络原理”课程主要讲授因特网的基本工作原理和重要协议。课程内容包括:因特网结构、常用应用层协议、套接字、可靠数据传送原理、TCP拥塞控制和流量控制方法、路由器、路由选择算法和IP协议、分组交换机、共享多址技术和以太网。上述内容是计算机网络中最重要和基本的内容,适合所有IT相关专业的学生学习。
“互联网应用与维护”是一门以实际动手为主的课程,主要讲授因特网上的各种常用应用服务器的配置、维护和使用。课程内容包括配置与使用DNS、Web、FTP、Telnet、DHCP、Oracle、媒体、打印等服务器,管理用户账户、备份文件和数据、监视服务器性能及使用一些重要的网络应用软件。该课程能够培养学生的网络实践能力,加深对网络原理的理解,适合大多数专业的学生学习。
“网络应用编程”课程主要讲授基于网络的应用程序的编程开发方法,重点学习基于Web编程方法(NET或Java)和基于套接字软件编程方法。随着网络的普及,网络应用程序开发技能变得极为重要,学生不能仅限于学习C语言、数据结构、C++和数据库,还需要一门学习如何将这些知识结合起来用于解决实际问题的课程。本课程适合计算机、软件、网络等专业的学生学习。
“网络安全”课程主要介绍网络攻击和防护的基本原理与手段。课程内容包括网络安全的机密性、鉴别、完整性和可用性,密码学概述,防火墙原理,常用网络攻击方法,访问控制,审计,防范黑客程序和相关技术发展动向。这门课程适合大多数专业的学生学习。
“网络工程设计”课程主要介绍基于系统集成的思想设计小型、中型和大型网络系统的方法。课程内容包括系统集成模型、制作网络设计文档、分析网络需求、选用网络基本构件、设计逻辑网络、规划IP地址、设计物理网络、网络测试与排错等。本课程适合网络工程等专业的学生学习。
“网络管理”课程主要讲授网络管理的基本概念和基于因特网简单网络管理协议(SNMP)的原理和一些常用的网络管理工具。课程内容包括SNMP的管理模型、因特网管理的基本概念(命名树、SMI、MIB)、抽象语法记法ASN1、SNMPv1SMI、SNMPv2SMI、SNMPv1、SNMPv2、远程监视MIB、SNMPv3和其他进展。本课程主要适合网络工程等专业学生学习。
关于这套丛书
从2002年起,解放军理工大学根据上述思路对计算机网络课程进行了全面的教学改革。实践的结果表明,计算机网络课程群的建立及网络知识分类施教的做法提高了学生们的学习积极性,实践能力明显增强,前期学习的基础理论得到了巩固。
为了促进我国计算机网络教育转型,创新网络教学达到学以致用、以用促学的目标,满足高校网络教学的需求,解放军理工大学和机械工业出版社共同策划了这套系列教材,系统地介绍解放军理工大学在网络教学方面的探索成果,共同推进计算机网络的教学改革。该丛书由我国计算机网络界前辈、德高望重的谢希仁教授领衔,由一批活跃在计算机网络研究和教学前沿的中青年网络专家结合自己的教学和科研实践来编写教材。
目前,本丛书计划包括以下教材:
1)当今世界最负盛名、由Kurose和Ross两位教授撰写的网络教材《计算机网络:自顶向下方法(第4版)》(本科教学版),适用于“计算机网络原理”课程。
2)由陈鸣教授编写的《网络工程设计教程:系统集成方法(第2版)》,适用于“网络工程设计”课程。
3)高屹副教授和沙俊星讲师编撰的《网络应用程序设计教程》,适用于“网络应用编程”课程。
4)由陈鸣教授编撰的《计算机网络实验教程:从原理到实践》(普通高等教育“十一五”国家级规划教材、教育部2007年度普通高等教育精品教材),用于各门课程的网络实验。
此外,有关“互联网应用与维护”、“网络管理”、“网络安全”等网络教材也在编撰之中。欢迎国内外从事网络教学的教师、学者们加入到本丛书的编撰队伍中来,我们共同将这套丛书打造成反映我国计算机网络教学理念的系列精品教材。
计算机网络是目前最具发展活力的领域之一,计算机网络及其实验的教学也需要不断创新,才能跟上时代发展的需要。对于这样一个极具挑战性的研究课题,本丛书可能只是回答了计算机网络某个发展阶段的一些问题,肯定还存在着这样或那样的不足和缺点,我们欢迎大家批评指正、提出建议或申报丛书选题。联系方式:mingchen@public1pttjscn。
丛书编委会
本书的新颖之处
如果把整个计算机技术比作一座大城市,那么计算机网络技术就是该城市中四通八达的高速公路和高架桥,基于网络的程序设计就是激发这座城市活力的设计蓝图。因为在今天几乎任何有应用前景的应用程序都必须与网络相联系,而编制网络应用程序就是亲手建造一座座匠心独具、风格各异的建筑物。随着社会信息化程度的提高、网络技术的快速发展和网络应用的大量涌现,社会对能够设计建设蓝图的设计师的需求量越来越大。因此,在教学和科研实践中,我们认识到,对高等院校中的计算机科学与技术以及软件工程等专业的学生,只是教授C语言、C++语言、Java语言、软件工程等课程是不够的,还需要有针对性地向学生传授基于网络的应用程序的设计与开发技能,并进行从理论到实践的强化训练。
从计算机操作系统的角度看,开发网络应用程序有三个应用编程接口(API)可供使用,自上而下是分别是应用组件API、套接字API和硬件设备API。应用组件API是指基于成熟框架、面向企业应用的程序设计平台(如ASPNET、J2EE等),这些平台工具通常具有功能丰富的组件。这些组件往往屏蔽了有关网络的大量技术细节,使得网络应用程序的设计开发较为容易,但也会限制某些特殊功能的实现。不过一旦熟练掌握它们的开发方法,就能够高效地设计实现基于网络的应用程序。不过要掌握这些编程工具平台也需要花费相当多的时间和精力。
套接字API是指基于TCP/IP Socket接口。基于套接字API当然可以编制出任何基于网络的应用程序,包括应用组件API。因此,从设计开发网络应用程序的效率来讲,学习这部分内容通常对编制多线程服务器程序更为有用和关键。
基于硬件设备API进行编程是指基于某种硬件(如以太网)接口标准设计开发某种特殊用途的应用,例如高效地捕获和分析以太网帧,以用于网络安全和网络管理应用目的。
这些教学内容有些不属于高校的教学内容,有些则在某些学校是分属于两门甚至更多门课程的教学内容。我们在教学与科研实践中发现,掌握这些知识内容对于计算机、网络工程、软件工程等专业的学生进入社会并获得重用非常重要。因此,我们根据计算机系网络课程体系研究的总体思考,觉得非常有必要设置这样一门课程,而且将这些内容放在一门课程中,由教师们根据培养目标进行取舍讲授,教学效果可能会更好。这样的教学安排不仅可以使学生们“知其然”,也会使他们“知其所以然”,促使他们更多地思考和创新。当然,对于学时数不那么多的学校,也可以只进行应用组件API方面的课堂教学,而将后面章节全部留给学生自学或留待他们作为以后工作中的参考。
本书的组织形式
本书的第1章到第11章讲解的是基于ASPNET的程序设计。之所以选择讲授ASPNET而不是J2EE,只是从学生们入门难度和今后可能的应用考虑。本书的第12章到第17章讲解基于Socket的程序设计,如果教师感到这部分内容对学生用处不那么大,或教学学时不够,完全可以根据具体情况进行取舍,这不会影响教学内容和知识体系的完整性。
为了便于教师教学,也便于学生理解,本书坚持了理论和知识点为提高学生实践动手能力服务的原则。在讲述基本的理论之后,辅以大量的由简到难的实例,学生们循序渐进地掌握相关知识,为今后编制丰富多彩的网络应用程序奠定了坚实的基础。因此,本书无论是作为工具书还是作为教科书都是相当合适的。
本书中涉及的所有源代码可以从华章网站(http://wwwhzbookcom)下载。
需要具备的知识
在阅读本书之前,要求读者对TCP/IP网络有基本了解,并要掌握一些C/C++和数据结构的基础知识,现在高校计算机及相关专业大都会开设这些课程。许多青年人通过自学也能够掌握这些基础知识。
致谢
本书的编写得到了很多专家的指导与帮助,也借鉴了很多教材的内容组织形式,作者在此深表谢意。特别要感谢陈鸣教授一直鼓励作者们按自顶向下方式写作这本书,多次与作者们讨论本书的提纲及其教学思路,并审阅了部分章节的内容,提出了很多具体的改进意见。在本书出版之际,我们非常感谢陈鸣教授一直以来给予我们的鼓励、支持与帮助!解放军理工大学计算机系网络工程教研室的赵洪华、许博等教师使用本书的初稿进行了本科、大专和短训班等不同层次的教学,为本书提出了许多宝贵的改进意见。作者也用本书初稿对多个班级进行了为期两年的本科教学,非常感谢在此期间对本课程教学各方面提出改进意见的解放军理工大学指挥自动化学院和计算机系的领导。学习“网络应用编程”课程的学生们对本课程的投入和热情,也是我们不断修改和完善本书初稿的动力。我们的教学实践证明,开设本课程的目的已经达到,本书作为“网络应用编程”课程的教材也有了良好的开头。从这种意义上讲,本书是集体智慧和创作的结晶。其中,高屹副教授编写了本书第1章到第11章;沙俊星讲师编写了第12章到第17章。
开设这样一门课程本身就是一种挑战,还需要时间来检验和改进。例如,本书不排除今后选用J2EE来代替ASPNET作为应用组件API的基本案例来设计开发基于网络的应用程序的可能。限于作者的水平和时间,本书肯定会有这样那样的不足之处,我们希望教师及各位读者给予批评指正,以期不断提高本书的编写质量。作者的电子邮箱是:njgaoyi@yahoocomcn和shajunxing@163com。
作者
20084
本书以前导课程(计算机网络原理、程序设计语言和数据结构)为基础,有针对性地讲授网络应用程序的设计与开发方法及技术,介绍必要的理论知识,强调网络应用程序设计的实践环节。从计算机操作系统的角度看,开发网络应用程序有三个可供使用的应用编程接口(API):应用组件API、套接字API和硬件设备API。本书重点介绍基于前两个API来开发网络应用程序,其中,第1章到第12章讲解基于ASP.NET的程序设计,第13章到第17章讲解基于Socket的程序设计。教师在授课时可以根据课程要求、教学学时、学生的专业方向和就业需求的具体情况进行相应的取舍。
本书强调网络编程的实用性,重点培养学生的网络编程能力,坚持理论和知识点为提高学生实践动手能力服务的原则,在讲述基本的理论之后,辅以大量的由易到难的实例,使学生“知其然”,也“知其所以然”,促使他们更多地思考和创新,循序渐进地提高网络应用程序的设计和编程能力。
授课教师可登录华章网站下载电子教案,读者也可以从华章网站下载本书的源代码。
丛书前言
前言
教学建议
第1章网络应用基础
11HTML标记语言
111HTML的基本概念
112HTML元素
12CSS
121什么是CSS
122CSS的使用
123选择器
124CSS文件样例
13JavaScript语言
131JavaScript语言概况
132JavaScript基本数据
类型
133函数与事件驱动
习题第2章ASPNET开发入门
21开发环境的建立
211安装Visual Studio 2005
212安装MSDN Library
22Visual Studio集成开发环境
介绍
221系统的启动
222第一个应用程序
223集成开发环境介绍
习题第3章C#语言基础
31数据类型
311值类型
312引用类型
32C#基本操作
321变量和常量
322装箱和拆箱
323控制台输入和输出
324字符串处理
33流程控制
331条件语句
332循环语句
333异常处理语句
34类和结构
341定义类和结构
342定义属性
343定义索引器
344方法重载
345使用ref和out类型
参数
346抽象类和接口
习题第4章ASPNET基本控件
41控件概述
411Web控件的分类
412ASPNET服务器控件常用的
属性和事件
413事件驱动与事件处理
42一般控件
421Label控件
422Button控件
423TextBox控件
424HyperLink控件
43选择控件
431CheckBox控件
432RadioButton控件
433ListBox控件
434DropDownList控件
44Panel控件
45图片控件
451Image控件
452ImageMap控件
习题第5章ASPNET高级控件
51Calendar控件
511Calendar控件基本
概念
512改变Calendar控件的
外观
513对Calendar控件编程
52FileUpload控件
53Wizard控件
54PlaceHolder控件
55AdRotator控件
56验证控件
561RequiredFieldValidator
562ValidationSummary控件及
验证结果判断
563CompareValidator控件
564RangeValidator控件
565RegularExpressionValidator
控件
566CustomValidator控件
习题第6章构建网站
61ASPNET网站综述
611解决方案和项目
612ASPNET网站布局
613网站的组成文件
614网站文件类型
615关于代码隐藏
616网站的状态
62Response对象
63Request对象
631Request对象概述
632Params属性
633ServerVariables属性
64Application对象
65Session对象
66Server对象
67构建网站示例
习题第7章应用ADONET编程
71ADONET概述
72使用ADONET连接到
数据库
721连接到SQL Server
数据库
722连接到Oracle数据库
723通过OLE DB连接到
数据库
724连接数据库实例
73使用Command对象和DataReader
对象
74使用DataAdapter对象和DataSet
对象
75使用Command对象直接修改
数据库
习题第8章Web数据访问
81数据源控件
811数据源控件概述
812SqlDataSource控件
82GridView控件
821常用属性和事件
822GridView控件的基本
应用
823通过GridView控件修改
数据
824多个GridView和多个
SqlDataSource相互
配合
825对GridView控件编程
83DataList控件
831常用属性和事件
832DataList控件的
基本应用
833对DataList控件编程
834进一步对DataList
控件编程
84DetailsView控件
841常用属性和事件
842DetailsView控件的
示例
习题第9章数据绑定
91嵌入式代码与简单数据
绑定
911嵌入式代码块
912嵌入式表达式
913ASPNET表达式
914简单数据绑定
92一般控件的数据绑定
921与DataSource对象
绑定
922绑定到ADONET的查询
结果
93Web数据控件的数据绑定
94Repeater控件
习题第10章其他内容
101母版页
102导航
103用户控件
1031用户控件的使用
1032NewsUCascx用户
控件
1033ActiveOpascx用户
控件
104网站的部署
习题第11章“畅想网络学院”
111系统总体设计
1111功能设计
1112数据库设计
1113示例数据库的建立
1114网站项目的创建
112系统体系结构的设计与实现
1121数据访问层的实现
1122业务逻辑层的实现
1123表示层的实现
113系统登录
114系统菜单的实现
115Cookie的使用
1151什么是Cookie
1152写入Cookie
1153读取Cookie
1154删除Cookie
116修改口令
117教师管理
118学生管理
119课程管理
1110我的课程
习题第12章Windows Socket API
简介
121Socket概念
122WinSock的初始化和终止
1221WSAStartup()
1222WSACleanup()
123错误检查和控制
124创建和释放套接字
1241socket()
1242closesocket()
125面向连接的协议(TCP)
1251bind()
1252listen()
1253accept()
1254connect()
1255send()
1256recv()
126无连接协议
1261sendto()
1262recvfrom()
127域名解析
1271gethostbyname()
1272gethostbyaddr()
1273getservbyname()
习题ⅩⅦ第13章TCP Socket编程
131TCP协议简介
1311概述
1312三次握手
1313TCP选项
1314终止连接
1315TCP状态转换图
1316观察分组
132编程模式
133实例
习题第14章UDP Socket编程
141UDP协议简介
142编程模式
143实例
习题第15章原始套接字编程
151简介
152ICMP
153Ping示例
154Traceroute示例
习题第16章Winpcap编程
161网络数据包捕获的原理
162数据包捕获程序的结构
163获取网络接口列表
164获取设备的高级信息
165打开一个接口并捕捉流量
166Winpcap包含的定义和输出
函数
1661结构体
1662宏定义
1663自定义类型
1664与Unix兼容的函数
1665Winpcap扩展函数
习题第17章多线程下的Socket编程
171基本概念
1711Win32进程
1712Win32线程
1713Win32核心对象
1714C运行时库
172线程控制
1721线程函数
1722创建线程
1723终止线程
1724挂起与恢复线程
1725睡眠
173线程通信
1731全局变量
1732事件
1733临界区
1734互斥
1735信号量
1736互锁访问
1737可等待定时器
174网络服务器设计模式
1741循环式服务器
1742并发式服务器
1743反应式服务器
1744异步I/O和前摄式
服务器175实例
1751HTTP协议基础
1752HTTP消息格式
1753简单的HTTP
服务器
习题
参考文献