《网络编程技术实验》教学大纲
Experiments of Network Program Technology
课程代码:BK067007学时:32学分: 1
理论学时:0 实验或讨论学时:32
适用专业:网络工程 课程性质:必修
撰稿人: 杨传栋审定人:巩君华
一、实验课的性质与任务
《网络编程技术实验》是与《网络编程技术》配套的实验课程,是网络工程专业的核心课程。《网络编程技术》是一门实践性很强的课程,学生只有通过大量的编程实践,才能逐步掌握所学知识,加深对相关原理的理解,提高网络应用开发能力。实验课是帮助学生课堂听讲、课下自学和编程练习等学习环节相辅相成、有机结合必不可少的一个教学环节,是对学生能力的一种综合训练。本课程的主要任务是,通过相应的实验项目,使学生加深对理论教学所学的基本概念和基本原理的理解,逐步掌握网络编程的基本技能和方法,增加编程经验,并在此基础上强化学生的实践意识、提高学生实际动手能力,激发学生的应用创新能力。
二、实验目的与要求
通过本课程的学习,达到深化理解和灵活掌握教学内容的目的,以及提高学生分析问题、解决问题的应用能力。同时,使学生的工作规范和科学作风得到培养。通过该课程的学习,要求学生能独立分析问题,设计体系结构,实现程序的各项功能,得到正确的可执行程序,学会调试程序,对设计过程进行系统的总结。
完成对每个知识点的知识验证、设计实现调试规定的实验内容;能运用所学知识独立设计、调试程序;尽量丢掉指导教师这个“拐杖”。
三、实验项目设置情况
序号 | 实验项目名称 | 学时 | 开出要求 | 实验项目类型 |
必做 | 选做 | 基础型 | 综合设计 | 研究创新 |
演示 | 验证 |
1 | 实验一 创建对话框应用程序以及Windows控件的使用 | 4 | √ |
| | | √ | |
2 | 实验二 MFC的文件操作 | 2 | √ |
|
|
| √ |
|
3 | 实验三 查询主机的网络配置信息 | 4 | √ | | | | √ | |
4 | 实验四 使用流式套接字传输数据 | 4 | √ | | | | √ | |
5 | 实验五 TCP服务器端的多线程编程 | 4 | √ | | | | √ | |
6 | 实验六 WinSOCK的IO模型 | 6 | √ | | | | √ | |
7 | 实验七 数据报套接字编程与广播程序设计 | 4 | √ | | | | √ | |
8 | 实验八原始套接字编程 | 4 | √ | | | | √ | |
9 | | | | | | | | |
| | | | | | | | |
四、各实验项目教学内容
实验项目一:创建对话框应用程序以及Windows控件的使用4学时
(一)实验目的要求
1.熟悉Visual Studio中的VC++的MFC程序开发环境。
2.掌握使用“MFC应用程序向导”创建对话框应用程序框架的方法;
3.掌握给对话框窗口添加控件的方法,以及使用“MFC类向导”为控件通知消息映射消息处理函数的方法;
4.掌握使用“MFC类向导”为控件添加控件变量的方法;
5.掌握控件变量与控件的数据交换机制(DDX)以及使用控件变量访问和控制控件的方法;
6.掌握在对话框中添加自定义消息的方法。
(二)实验材料和仪器设备
运行Windows系统的PC机,Visual Studio2010或以上版本。
(三)实验内容
1.创建一个Windows对话框应用程序,其界面如下图所示。要求实现以下功能:在下部的文本编辑框(Edit Control)中输入内容后,单击“添加”按钮,文本编辑框的内容被作为一个条目添加到上部的列表框(List Box)中。
2.为上一步创建的程序添加一条自定义消息,消息名为WM_MYMESSAGE,也可自己命名。单击“添加”按钮时,将发送该消息,该消息的处理函数将删除编辑框中已输入的所有内容。
实验项目二:MFC的文件操作2学时
(一)实验目的要求
1.进一步熟悉Visual Studio中的VC++的MFC程序开发环境,掌握使用“MFC应用程序向导”创建对话框应用程序框架的方法;
2.进一步熟悉给对话框窗口添加控件的方法,以及使用“MFC类向导”为控件通知消息映射消息处理函数的方法,掌握使用“MFC类向导”为控件添加控件变量的方法、控件变量与控件的数据交换机制(DDX)以及使用控件变量访问和控制控件的方法;
3.掌握使用CFile类进行文件操作的方法。
4.掌握使用CFileDialog的使用方法。
(二)实验材料和仪器设备
运行Windows系统的PC机,Visual Studio2010或以上版本。
(三)实验内容
编写一个简单的文本文件编辑器,其界面如图所示。
实验项目三:查询主机的网络配置信息4学时
(一)实验目的要求
1.掌握WinSock动态链接库的加载和注销方法;
2.熟悉并掌握gethostname()、gethostbyname()、getservbyname()、getservbyport()、getprotobyname()、getprotobynumber()等函数的功能及用法;
3.掌握使用异步信息查询函数的编程方法。
(二)实验材料和仪器设备
运行Windows系统的PC机,Visual Studio2010或以上版本。
(三)实验内容
1.编写一个控制台应用程序,调用gethostname()和gethostbyname()函数,查询并显示本机的主机名称及IP地址。
2.编写一个控制台应用程序,调用getservbyport()查询并显示本机上所有的使用UDP协议的服务的名称及端口号。
3.编写一个控制台应用程序,调用getservbyname(),查询并显示TCP协议和UDP协议的协议编号,调用getprotobynumber()查询并显示所有因特网协议的名称及相应的协议号。
4.编写一个对话框应用程序,程序界面如图所示。程序功能:在文本框中输入域名后,单击“解析域名”命令按钮便可在下面的列表框中显示解析后的域名。要求使用WSAAsyncGetHostByName()函数实现。
实验项目四:使用流式套接字传输数据4学时
(一)实验目的要求
1.掌握使用流式套接字编写通信程序的流程,熟悉socket()、bind()、send()、recv()等相关套接字函数的功能及使用方法;
2.掌握使用流式套接字传输文件的基本编程方法。
(二)实验材料和仪器设备
运行Windows系统的PC机,Visual Studio2010或以上版本。
(三)实验内容
1.使用流式套接字编写一字符界面的通信程序,客户端在与服务器连接成功后,从键盘依次输入若干同学的姓名、学号、性别和考试成绩并发送给服务器端,当输入的姓名为“end”时结束程序;服务器端显示连接成功的客户端的IP地址,然后接收并显示客户端发来的每个同学的姓名、学号、性别、考试成绩,收到“end”后结束。
2.编写一个文件上传程序。服务器端为控制台应用程序,可接收客户发来的多个文件并保存在一个指定的文件夹中。客户端为对话框应用程序,界面如图所示。在IP地址控件中输入服务器端的IP地址;单击“打开”按钮则弹出“打开文件”对话框,该对话框用于选择要上传的文件,选中的文件的路径显示在“打开”按钮左侧的文本编辑框中;单击“发送”按钮,则将选中的文件发送给服务器端。
说明:程序所使用的TCP端口号由编程者在编写程序时指定。
实验项目五:TCP服务器端的多线程编程4学时
(一)实验目的要求
1.掌握多线程的概念及多线程编程的基本方法;
2.掌握TCP服务器端使用多线程技术同时与多个客户通信的编程方法。
(二)实验材料和仪器设备
运行Windows系统的PC机,Visual Studio2010或以上版本。
(三)实验内容
1.将实验四的实验内容1中的服务器程序用多线程编程技术改写,使之可同时与多个客户端通信。显示收到的内容时,按如下格式显示:
客户IP地址:学号姓名性别考试成绩
收到姓名为end的信息时断开与客户端的连接。
2.将实验四的实验内容2中的服务器程序用多线程编程技术改写,使之可同时接收多个客户端上传文件。
实验项目六:WinSOCK的IO模型6学时
(一)实验目的要求
1.掌握套接字非阻塞模式下的编程方法;
2.掌握使用select模型管理多个套接字的编程方法;
3.掌握使用WSAAsyncSelect模型的编程方法;
4.了解使用WSAEventSelect模型的编程方法。
(二)实验材料和仪器设备
运行Windows系统的PC机,Visual Studio2010或以上版本。
(三)实验内容
1.编写一个服务器端程序和客户端程序。服务器端程序与客户程序的TCP连接建立后首先向客户端发送一条内容为“Connect succeed. Please send a message to me.”,然后等待接收客户端发送来的一条消息,收到后显示该信息并关闭连接。要求服务器端套接字使用非阻塞模式,允许同时有多个客户接入。客户端程序在与服务器的连接建立成功后接收并显示从服务器收到的信息,然后从键盘接收一行信息发送给服务器。
2.编写一个简易的群聊软件,该软件采用C/S模式。要求:①服务器使用字符界面(控制台应用程序),负责接收每个客户发送的消息,并将收到的每条消息及消息发送者的IP地址都转发给所有其他用户,允许同时接入最多30个客户;要求使用Select模型管理所有套接字,所有套接字均工作在非阻塞模式。②客户端使用图形界面(对话框应用程序),其界面如图所示。在IP地址控件中输入服务器端IP地址后单击“连接”按钮建立与服务器的连接;列表框控件逐条显示服务器转发来的其它客户端发表的聊天信息及对应IP地址;文本编辑框用于编辑自己要发表的信息,单击“发送”按钮可将文本框中的信息发送给服务器。要求使用WSAAsyncSelect模型。另外,程序所使用TCP端口号由编程者在编写程序时指定。
图 6.7 实验五群聊的程序客户端程序界面
3.将内容2的服务器改为使用WSAEventSelect模型实现;
4.将内容2的服务器改为使用WSAEventSelect模型实现。
实验项目七:数据报套接字编程与广播程序设计4学时
(一)实验目的要求
1.掌握使用数据报套接字编写通信程序的流程,熟悉sendto()、recvfrom()等相关套接字函数的功能及使用方法;
2.掌握使用数据报套接字发送和接收广播数据的方法。
(二)实验材料和仪器设备
运行Windows系统的PC机,Visual Studio2010或以上版本。
(三)实验内容
1.使用数据报套接字的C/S模型编写一个字符界面的简单聊天程序,客户端输入“bye”结束聊天,客户端退出,服务器端继续等待其它客户的信息;服务器端输入“bye”,则客户程序与服务器程序均退出。
2.使用数据报套接字编写一个简易的P2P模式的聊天程序,聊天者使用同一个程序的不同副本。程序界面如图所示,上部的列表框用于显示收到的信息(也包括收到的广播信息),编辑框用于输入要发送(包括广播发送)的信息,IP地址控件用于输入接收者的IP地址,单击“发送”按钮,编辑框中的信息便会发送给由IP地址控件指定的接收者,单击“广播发送”按钮,则文本编辑框中的信息会被广播给本IP网络中的所有计算机。
编写该程序时要求使用两个数据报套接字,一个用于发送广播信息,另一个用于接收信息和发送普通信息。程序所使用UDP端口号由编程者在编写程序时指定。
实验项目八:原始套接字程序设计4学时
(一)实验目的要求
1.掌握使用原始套接字收发ICMP报文的方法;
2.掌握将网卡设置为混杂模式的方法,以及在此模式下使用原始套接字编写简单的网络协议分析软件的方法。
(二)实验材料和仪器设备
运行Windows系统的PC机,Visual Studio2010或以上版本。
(三)实验内容
1.在已知目标主机开启,但目标端口号并未开启的情况下,向目标主机发送一个UDP数据报,目标主机将会返回一个类型码为3代码也为3的ICMP端口不可达差错报文;如果目标端口号已开启,目标主机将接收该数据报且不返回任何数据包。根据这一原理请编写一个程序,通过向一台已开启的主机的所有UDP端口,依次发送一个UDP数据报,根据其是否返回ICMP端口不可达报文判定目标主机有哪些UDP端口已打开。该程序就是所谓的UDP端口扫描程序。
2.实现ping程序。
3.编写一个简单的IP数据包捕获程序,该程序能捕获经过本地网卡的IP分组。要求能输入要捕获的分组数量,输出每个分组的源IP地址、目的IP地址、上层协议类型,如果是TCP或UDP则进一步输出源端口号和目的端口号,如果是ICMP则输出ICMP报文的类型和代码。
五、实验报告要求
本课程要求提交程序源代码,不要求写实验报告。
六、课程考核方式及成绩评定
(一)考核方式
平时成绩:ð每次实验的程序完成情况;
结课后考试:ð上机编程。
(二)课程成绩评定办法
成绩构成:考勤10% /平时ð50%//考试ð40%
七、实验应配套的主要仪器设备及台(套)数
32台联网的运行Windows系统的PC机,要求安装Visual Studio2010或以上版本。
附:教学参考资料
1、选用的教材:
杨传栋,Windows网络编程基础教程,清华大学出版社,2015年9月,第1版。
2、主要参考书:
[1]张会勇,WinSock网络编程经络,电子工业出版社,2012年8月,第1版。
[2]刘冰,张林等,VisualC++2010程序设计案例教程,机械工业出版社,2013年9月,第1版。
[3]刘琰,王清贤等,Windows网络编程,机械工业出版社,2014年1月,第1版。