“网络编程”教学方法的探索 刘汉兴,刘才兴,邝颖杰,田绪红(华南农业大学 信息学院,广东 广州 510642)摘 要:本文根据“网络编程”教学课题组多年的实际教学经验,分别对理论、实践、考核教学环节中的教学方法进行了总结,强调以学生为主体,结合案例教学,采用启发式、互动式、目标式多种教学方法,在实际教学中取得了较好的效果关键词:网络编程;教学方法;理论教学;实践教学1 课程介绍网络编程通常包括3类编程[1]:基于TCP/IP协议簇的网络编程、基于WWW应用的网络编程、Web Service网络编程网络编程”课程主要是指基于TCP/IP协议簇的编程方式,作为“计算机网络”的后续课程,在计算机类专业课程体系中占有十分重要的位置,是网络工程专业的必修课本课程要求学生在理解计算机网络的基本理论的基础上,运用高级语言进行编程开发,注重实践环节因此我们在大四上学期开设本课程,总学时为54(34+20)学时2 教学方法设计2.1 理论教学(1) 以人为本,学生自选编程语言现有的网络编程语言主要有MFC C++/C#.NET/Java[1-3],后两种语言是目前的主流选择。
早期的网络编程大都是基于UNIX或Windows的套接字API,采用C或C++作为编程语言此后由于Java鲜明的网络特色和跨平台特性,J2EE技术的推广普及,使用Java进行网络编程比较普及;而微软推出的.NET开发平台,由于其与Windows操作系统的无缝集成,开发工具的便捷、高效性,使得以C#.NET进行网络编程也逐渐流行网络编程”课程强调基于网络基本理论的编程实践,虽然不与具体的编程语言有必然的联系,但是编程语言在教学环节中又非常重要就学生来说,学习网络编程时正是高年级阶段,必修课程学过高级程序设计(C或C++)、面向对象程序设计(Java)、.NET开发(C#.net),任选其中的一种语言似乎都可行但据开课前我们对学生的调查显示,92%的学生愿意选择Java或C#中的一种,其中部分同学首选Java(有部分同学未修C#课程),另有部分同学强烈希望使用C#进行编程因此,课程教学课题组决定,学生可以根据个人的实际或兴趣任选其中一种编程语言,教师上课侧重网络基本理论的讲解,编程实践以C#和Java为主,并给出两种示例代码2) 结合案例,强调基本概念的理解与实践相融合网络编程作为应用型课程,其理论基础部分已在计算机网络课程中学习过,但偏重理论介绍,学习偏于单调枯燥,不排除学生死记硬背的可能。
上课时结合实践中的具体案例进行讲解,如网络游戏、即时通信工具(如)的实现原理,无疑会提高学习兴趣,真正做到理论与实践相融合但是如果不能真正理解基础概念,进行网络编程实践则相当困难,因此,在网络编程学习中需要强调基本概念的理解与实践下面举例说明① 端口与Socket端口:TCP/IP协议簇中,应用层进程与传输层协议实体间的通信接口端口是操作系统可分配的一种资源,包括一些数据结构和I/O缓冲区在TCP/IP实现中,端口操作类似于一般的I/O操作,进程获取一个端口,相当于获取本地唯一的I/O文件,可以用一般的读写原语访问端口是通过端口号(整数)进行标识的,如HTTP协议使用的80端口,FTP协议的21端口套接字(Socket):是对网络中不同主机上应用进程之间进行双向通信的端点的抽象,如图1所示,一个套接字就是网络上进程通信的一端,两个应用进程只要分别连接到自己的套接字,就能方便地通过计算机网络进行通信套接字是一个复杂的软件机构,由操作系统内核管理套接字生成后用一个整数(套接字描述符)来代表,使用时要与计算机上的特定IP地址和传输层端口号相关联,这个过程称为绑定② 对比分析建立连接的3次握手过程。
为确保连接的建立和终止都是可靠的,TCP使用3次握手(3-way handshake)的方式来建立连接图2示范了“计算机网络”课程中建立连接的典型示意图,图3示范了流式套接字建立连接的过程,通过对比分析,学生可以一目了然的理解连接是如何建立的③ 多线程的使用在网络应用进程通信时,普遍采用客户机/服务器交互模式(Client-Server paradigm of interaction),简称C/S模式如图4所示,作为服务器的一方,如果需要同时与多个客户端进行通信,服务端应用程序的设计就必然使用多线程编程因此,熟练操作线程是实现网络应用程序的关键在Socket的C#程序设计中,服务器端监听线程创建多个线程与客户端进行通信的过程示例代码为:字描述符)来代表,使用时要与计算机上的特定IP地址和传输层端口号相关联,这个过程称为绑定② 对比分析建立连接的3次握手过程为确保连接的建立和终止都是可靠的,TCP使用3次握手(3-way handshake)的方式来建立连接图2示范了“计算机网络”课程中建立连接的典型示意图,图3示范了流式套接字建立连接的过程,通过对比分析,学生可以一目了然的理解连接是如何建立的。
图2 TCP的3次握手过程③ 多线程的使用在网络应用进程通信时,普遍采用客户机/服务器交互模式(Client-Server paradigm of interaction),简称C/S模式如图4所示,作为服务器的一方,如果需要同时与多个客户端进行通信,服务端应用程序的设计就必然使用多线程编程因此,熟练操作线程是实现网络应用程序的关键在Socket的C#程序设计中,服务器端监听线程创建多个线程与客户端进行通信的过程示例代码为:图3 流式套接字编程的基本步骤图4 服务器创建多个线程与多个客户通信IPEndPoint ipep = new IPEndPoint(IPAddress.Any,6001);Socket serverSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);serverSocket.Bind(ipep);serverSocket.Listen(10);while (true){ //循环监听try{//在套接字上接收接入的连接clientSocket = serverSocket.Accept();clientThread = new Thread(new ThreadStart(ReceiveData));clientThread.Start();}catch (Exception ex){ MessageBox.Show("监听错误:" + ex.Message); }}客户端与服务器建立连接代码片断:IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"),6001);Socket clientSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);clientSocket.Connect(ipep);//阻塞模式,连接服务器(本机)(3) 启发兴趣、加强互动,丰富教学资源。
兴趣是学习的动力,在教学过程中提供丰富的教学资源和多种教学形式是提高学生学习兴趣,促进其主动学习的关键① 公布电子课件、示例源代码,学生可自由下载,并鼓励在课前进行预习对于完成效果较好、有创新点的学生实验作品,提出嘉奖并在网上公开② 加强教与学的互动,切实做好答疑环节学生可以方便地通过邮件、短信、等形式与课题组所有老师联系或提出疑问,而教师也会及时进行回复③ 结合课程特点和互联网应用的实际情况,设计受欢迎的实验题目目前流行的互联网应用系统,如网络游戏、即时通信系统等,学生自己独立完成都成为可能④ 介绍Linux及Unix操作系统下网络编程的实现目前的编程环境以Windows操作系统为主,而了解其他的开发环境和实现方式也会提高学习的兴趣2.2 实践教学如表1所示,将8个实验总学时数定为20,分为选做实验和必做实验,两种实验都必须按要求完成选做实验主要是指验证性实验,上机调试通过即可;必做实验为教师重点检查实验,要求提交实验报告,上机运行并根据实验的完成效果由教师现场给出成绩综合性实验是必做实验,可以单人完成,也可小组(2~3人)合作实现在所有实验当中,综合设计实验一般是在学期末布置,综合运用本课程所学知识进行设计相对较大型、有一定难度的实验。
但是如果在学期末才布置实验内容,会因为学生时间紧张、实验时间短的问题而影响实验效果因此我们实行“目标式”教学方法:从学期开始就要求学生根据自己的兴趣爱好,从综合性设计性实验题目中选取一个(或多个)作为实验目标,让学生较早了解实验内容和要求,在平时学习中有针对性地准备,到学期末完成实验目标就水到渠成实践表明,这种目标教学法既可以提高学习动力,同时实验完成效果也较为理想3 考核方式期末成绩为综合成绩,分为期末考试成绩和平时成绩,其中综合成绩=期末考试成绩(70%)+平时成绩(30%,包括实验成绩、考勤情况等)期末考试为闭卷考试(120分钟),重点考核基本理论的理解及其实现;平时成绩主要针对学生上课的出勤率、上课表现等情况,按比例折算实验成绩(实验成绩为几个必做实验的综合平均)例如:如果出勤率较高、上课表现积极,则平时成绩就是实验成绩的100%由于实验成绩由教师根据实验效果现场给出,分数的高低也鼓励学生认真完成实验要求并力求创新,从而促进了学习的积极性4 结语在课题组教师的共同努力下,通过几个学期来对网络编程教学方法的探索和实践,本课程已经建立起较完善的教学体系和教学方法从教学效果来看,提高了学生的积极性和主动性,增强了学生的创新能力、分析解决实际问题的工作能力。
今后,我们仍需不断地研究,不断地总结教学经验,使整个教学环节更加完善合理参考文献:[1] 叶树华,高志红. 网络编程实用教程[M]. 北京:人民邮电出版社,2006.[2] 汪晓平,贾敬习,李功. 精通Java网络编程[M]. 2版. 北京:清华大学出版社,2009.[3] 梅晓冬,颜华青. Visual C#网络编程技术与实践[M]. 北京:清华大学出版社,2008.Teaching Method Discussion of “Network Programming”LIU Han-xing, LIU Cai-xing, KUANG Ying-jie, TIAN Xu-hong(College of Informatics, South China Agriculture University, Guangzhou 510642, China)Abstract: based on practical teaching experience of Network Programming teaching team, the methods are summarized of theory, practice and examine teaching. Student-centered is emphasized, cases are combined in teaching, several teaching methods are used, such as heuristics, interactive and target methods, and good effect is acquired in our teaching pr。