当前位置:文档之家› 网络开发与应用实验指导书

网络开发与应用实验指导书

哈尔滨工业大学软件学院《网络开发与应用》实验指导书李全龙宋艳艳2005年10月前言《网络开发与应用》课程是计算机科学与技术专业的重要专业课程之一。

随着互联网的蓬勃发展,计算机网络在社会经济和人们生活中占据着越来越重要的地位,成为经济发展和现代生活不可缺少的一部分,掌握计算机网络知识成为社会对人才的基本要求。

作为培养高素质人才的高校,为了满足社会对人才的需求,给《网络开发与应用》课程的教学提出了新的更高的要求。

计算机网络是一门实践性很强的课程,实践环节在教学过程中起着越来越重要的作用。

通过实验不仅可以加深学生对网络原理的理解和掌握,更重要的是培养学生在网络方面的应用、管理和维护能力,并根据所学知识分析解决网络应用过程中出现的问题。

希望同学们在使用本实验指导书及进行实验的过程中,能够帮助我们不断地发现问题,并提出建议,使《网络开发与应用》成为具有世界一流水平的课程。

本学期授课教师为李全龙老师,参与网络课程助教环节的教师为宋艳艳同学。

实验要求计算机网络是现代信息社会最重要的基础设施之一。

在过去十几年里得到了迅速的发展和应用。

《网络开发与应用》课程实验的目的是为了使学生在课程学习的同时,通过在一个计算机网络环境中的实际操作,对现代计算机网络的基本功能有一个初步的了解;通过实现一个客户服务器程序,掌握Socket编程框架,熟悉典型的Socket系统调用;通过一个典型的并发服务器的设计与实现,了解计算机网络的服务器程序开发;还提供了一些设计实验以使同学们的兴趣进一步提高。

总之,通过上述实验环节,使学生加深了解和更好地掌握《网络开发与应用》课程教学大纲要求的内容。

在《网络开发与应用》的课程实验过程中,要求学生做到:(1)预习实验指导书有关部分,认真做好实验内容的准备,就实验可能出现情况提前做出思考和分析。

(2)仔细观察上机和上网操作时出现的各种现象,记录主要情况,做出必要说明和分析。

(3)认真书写实验报告。

实验报告包括实验目的和要求,实验情况及其分析。

对需要编程的实验,写出程序设计说明,给出源程序框图和清单。

(4)遵守机房纪律,服从辅导教师指挥,爱护实验设备。

(5)实验课程不迟到。

如有事不能出席,所缺实验一般不补。

实验的验收将分为两个部分。

第一部分是上机操作,包括检查程序运行和即时提问。

第二部分是提交书面的实验报告。

此外,网络实验采用当堂检查方式,每个实验都应当在规定的时间内完成并检查通过,过期视为未完成该实验,不计成绩。

以避免集中检查方式产生的诸多不良问题,希望同学们抓紧时间,合理安排,认真完成。

实验评分标准一、课堂表现(10分)1.出勤情况(按时,迟到,早退,缺席)2.是否遵守课堂纪律二、实验结果(50分)1.当堂按时完成(10分)2.独立完成(10分),(和同学协商完成,在老师帮助下完成)3.结果正确无误(10分)4.功能齐全,界面美观,具有较好演示效果(10分)5.在源程序中有必要的注释和说明(5分)6.程序文档齐全(5分)三、实验报告(40分)1.对预习要求的回答(10分)2.实验过程中遇到的问题如何解决的(10分)3.实验的体会(10分)4.思考题(10分)实验1熟悉socket编程和客户服务器编程实验目的1. 更加熟悉VC开发环境。

2. 掌握socket编程框架。

3. 熟悉典型的socket系统调用和相关函数等,为后面几个实验奠定基础。

实验要求一、对学生要求:1.掌握网络通信原理。

2.掌握socket通信机制。

3.掌握使用socket的编程思想。

4.根据算法编写与实验内容相关的程序,要求该程序能实现同步通信功能。

二、对实验指导教师要求:1.熟悉VC语言。

2.熟悉socket网络程序设计。

3.编写并运行该题目程序代码,具有该题目的参考答案。

4.深刻理解题目内涵,能够清晰描述问题,掌握该题目涉及的知识点,指导学生实验时需要注意的问题。

实验内容在VC开发环境下,使用C语言,应用socket实现网络通信。

实验结果要求服务器端出现两个窗口,一个是监听器窗口(此窗口显示客户端的IP地址),另一个是服务器端对话窗口(显示客户端发送来的消息)。

客户端出现带按钮的消息发送窗口,用户就通过此对话窗口与服务器对话。

程序结果窗口如图所示:编程提示完整的客户服务器端程序的作用是先建立一个服务器程序并启动监听线程,监听线程的窗口(Server Listener)中显示出客户机连接和断开的情况。

当一个客户机程序启动并向服务器提出请求时,客户机窗口被创建,这个窗口中包含3个按钮,当用户点击某个按钮时,程序读取服务器端的相应信息并显示在窗口中;同时在服务器端,为响应客户机的请求,一个新的线程被创建和启动,建立窗口Answer Client n,其中n是客户机的连接序号,这个线程将监听客户机端所做的操作并将有关信息在窗口中显示出来。

当用户结束对服务器端的信息查询时,客户机窗口被关闭,相应地,与之通信的服务器进程也结束。

所有这些客户机的连接和断开信息都将在监听进程的窗口中显示出来。

思考题1.典型的通信发生在一个客户端和一个服务器端之间,这样的通信对应着几个套接字?这些套接字在客户和服务器之间建立的连接是单向数据传送还是双向数据传送?2.如何理解套接字中端口的含义?实验2 循环服务器实验目的1. 熟悉循环服务器的概念。

2. 掌握UDP循环服务器的实现。

3. 掌握TCP循环服务器的实现。

实验要求一、对学生要求:1. 掌握UDP循环服务器原理。

2. 掌握TCP循环服务器原理。

3.根据算法编写与实验内容相关的程序,要求该程序能实现循环服务器功能。

二、对实验指导教师要求:1.熟悉循环服务器原理。

2.编写并运行该题目程序代码,具有该题目的参考答案。

3.深刻理解题目内涵,能够清晰描述问题,掌握该题目涉及的知识点,指导学生实验时需要注意的问题。

实验内容在VC开发环境下,使用C语言,编程实现一个循环服务器。

该程序等候客户连接,一旦连接则显示客户的地址,然后接收来自该客户的信息(字符串)。

每当收到一个字符串,则显示该字符串,并将字符串反转,再将反转的字符发回客户。

之后,继续等待接收该客户的信息直至该客户关闭连接。

完成与该客户交互后,服务器开始等待下一客户,并重复上述过程。

例如,客户连接到循环服务器上之后,并且发送了一串字符“abc”。

在循环服务器端先显示客户的地址,然后显示这个客户信息“abc”,服务器将字符反转变成“cba”之后发会给客户。

直到该客户关闭连接为止,服务器开始为下一个客户服务。

一直重复这个过程。

思考题1.什么叫循环服务器?UDP循环服务器和TCP循环服务器的区别是什么?2.什么情况下,UDP循环服务器对于客户机的请求不能满足?实验3 并发服务器(1)实验目的1. 熟悉并发服务器的概念。

2. 熟悉多协议服务器的概念。

3. 掌握UDP并发服务器的实现。

4. 掌握TCP并发服务器的实现。

实验要求一、对学生要求:1. 掌握UDP并发服务器原理。

2. 掌握TCP并发服务器原理。

3. 掌握使用TCP Sockets构建客户服务器网络。

4. 学会构建并发服务器。

5. 根据算法编写与实验内容相关的程序,要求该程序能实现并发服务器功能。

二、对实验指导教师要求:1. 熟悉并发服务器原理。

2. 编写并运行该题目程序代码,具有该题目的参考答案。

3. 深刻理解题目内涵,能够清晰描述问题,掌握该题目涉及的知识点,指导学生实验时需要注意的问题。

实验内容在UNIX/KDE开发环境下,使用C语言,实现一个ECHO服务器。

扩展程序功能,实现一个既可以支持UDP服务,同时又可以支持TCP服务的多协议ECHO 服务器。

提示:考虑文件TCPmechod.c,它含有实现ECHO服务的一个单进程服务器的代码:/*TCPmechod.c - main,echo*/#include <sys/types.h>#include<sys/socket.h>#include<sys/time.h>#include<netinet/in.h>#include<unistd.h>#include<string.h>#include<stdio.h>#define QLEN 5 /*maximum connection queue length */#define BUFSIZE 4096extern int errno;int errexit(const char * format,…..);int passiveTCP(const char *service, int qlen);int echo(int fd);/*―――――――――――――――――――――――――――――――*main ——Concurrent TCP server for ECHO service *―――――――――――――――――――――――――――――――*/int main(int argc, char * argv[]){char *service =”echo”; /*service name or port number */struct sockadder_in fsin; /*the from address of a client */int msock; /*master server socket */fd_set rfds; /*read file descriptor set */fd_set afds; /*active file descriptor set */int alen; /*from-address length */int fd,nfds;swith(argc){case 1:break;case 2:service=argv[1];break;default:errexit(“usage:TCPmethod[port]\n”);}msock=passiveTCP(service,QLEN);nfds=getdtablesize();FD_ZERO(&afds);FD_SET(mscok,&afds);While(1){memcpy(&rfds,&afds,sizeof(rfds));if(select(nfds,&rfds,(fd_set *)0,( fd_set *)0,(struct timeval *)0)<0) errexit(“select:%s\n”,strerror(errno));if(FD_ISSET(msock,&rfds)){int ssock;alen=sizeof(fsin);*)&fsin,&alen);sockaddrssock=accept(msock,(structif(ssock<0)errexit(“accept:%s\n”,strerror(errno));FD_SET(ssock,&afds);}for(fd=0;fd<nfds;++fd)if(fd!=msock&&FD_ISSET(fd,&rfds))if(echo(fd)==0){(void)close(fd);}}}/*―――――――――――――――――――――――――――――――――*echo -echo one buffer of data, returning byte count *――――――――――――――――――――――――――――――――――*/intecho(int fd){char buf(BUFSIZ);cc;intcc=read(fd,buf,sizeofbuf);if(cc<0)read:%s\n",strerror(errno));errexit("echoif(cc&&write(fd,buf,cc)<0)write:%s\n",strerroe(errno));errexit("echocc;return程序说明类似多进程实现中的主服务器,单进程服务器一开始就在知名端口上打开一个被动插口。

相关主题