(完整word版)计算机网络课程设计实验报告

  • 格式:doc
  • 大小:103.50 KB
  • 文档页数:14

下载文档原格式

  / 14
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机网络课程设计报告

姓名:

学号:

班级:

指导老师:

湖南科技大学计算机科学与工程学院

2013年6月

实验一

1.实验名称:网络聊天程序的设计与实现

2.实验目的:通过本实验能够了解socket通信的原理并在此基础上编写一个聊天程序了解TCP/IP的基础知识,发现TCP与UDP的优缺点以及在网络通信的应用。

3.实验原理:从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。当网络的边缘部分中的两个主机使用网络的两个主机使用网络的核心部分进行端到端的通信时,只有主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到下三层的功能。从IP层来说,通信的两端是两个主机,IP数据报的首部明确的标志了这两个主机的IP地址。但是严格的讲,两个主机进行通信就是两个主机中的应用进程互相通信。根据应用程序的不同需求,运输层需要有两种不同的运输协议,即是面向连接的TCP和无连接的UDP。在使用这两个协议时运输层向高层用户屏蔽了下面的网络核心的细节,它使应用进程看见的就是好像在两个运输层实体间有一条端到端的逻辑通信信道,但这条逻辑通信信道对上层的表现却因运输层使用的不同协议而有很大的差别。当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的,但这种逻辑通信信道就相当于一条全双工的可靠信道。但当运输层采用无连接的UDP协议时,这种逻辑通信信道仍然是一条不可靠信道。由于我在课程设计中采用的是UDP协议进行通信的,这里就只简述一下一些关于UDP的内容,UDP在传送数据之前不需要先建立连接。远地主机的运输层在收到UDP报文后,不需要给出任何确认。虽然UDP不提供可靠的交付,但在某些情况下UDP却是一种最有效的工作方式。为此当我们使用UTP协议使两个计算机中的进程要互相通信,不仅必需知道对方的IP地址(为了找到对方的计算机),而且还要知道对方的端口号(为了找到对方计算机中的应用进程)。我们的计算机通信时采用客户-服务器方式。客户在发起通信请求时,必需先知道对方的服务器的IP地址和端口号,因此通过IP地址和端口号我们就能将两台主机连接起来,然后通过输入输出流将信息发送到对方的主机上。这样就能实现网络的聊天程序。

4..流程图:

5.实验步骤:通过使用原理我们知道若要实现两主机间的通信最重要的是获得对方的IP地址和设置端口号,在实验中我们假定已经知道了要通信主机的IP地址,故在编程中主要的是套接字socke的编程步骤,在这个程序中,将两个工程添加到一个工作区。要链接一个ws2_32.lib的库文件。

服务器编程步骤:

1、加载数据库,创建套接字(WSAStrartup()/socket());

2、绑定套接字到一个IP地址和一个端口上(bind());

3、将套接字设置为监听模式等待请求(listen());

4、请求到来后,接受链接请求,返回一个新的对应于此次连接的套接字(accept());

5、用返回的套接字和客户端进行通信(send()/rec());

6、返回,等待另一个请求;

7、关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup()).

其次是客户端的编程步骤:

1、加载数据库,创建套接字(WSAStrartup()/socket());

2、向服务器发送连接请求(connect());

3、和服务器端进行通信(send()/recv());

4、关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup()).

6.实验过程中的问题:首先是在编写代码时考虑了是用TCP还是用UDP协议,通过翻看了原来计算机网络的书后举得利用TCP来编写聊天程序的话,由于TCP协议相对于UDP协议复杂了许多且是面向连接的运输层协议在每次建立与断开连接的时候都要不停的进行确认十分占用网络资源,但UDP就不用那么繁琐,且效率相对的要高出许多。但是在代码测试时老师说到作为一个聊天工具重点是信息的交流对于UDP很容易出现丢包的现象,且TCP协议具有很高的可靠性,对于网络的占用也并非想象中的那么严重,故对于编写此类程序还是用TCP 的好一些。其次是在编程过程中发现在通信过程中由于端口号只设定一个所以一旦服务器与一台客户端连接时,其他的的客户端就不能与服务器进行连接了,因为先前的客户端占用的端口号。通过与老师的交流后知道了,在使用TCP/UDP协议时有两条连接时,突然就有种豁然开朗的感觉。

实验二:

1.实验名称:Ping程序上设计与实现

2.实验要求:用C语言实现Ping命令程序,能实现基本的Ping操作,发送ICMP回显请求报文,用于测试—个主机到只一个主机之间的连通情况。

要求:

1)独立完成程序的设计、编码和调试。

2)系统利用C语言实现,程序调试环境为Turbo C或VC;

3)按照课程设计规范书写课程设计报告。

4)采用VC环境进行调试运行。

3.实验内容

本程序主要分为四个模块(功能模块图见图1.1):初始化模块,功能控制模块,数据报解读模块,Ping测试模块。初始化模块:该模块用于定义及初始化各个全局变量,为winsock加载winsock体。功能控制模块:该模块是被其他模块调用,其功能包括解析参数、计算ICMP

数据报文检验和、清除SOCKET,ICMP包数据以及接受缓冲区。数据报解读模块:数据报解析模块提供了解读IP选项和解读ICMP报文的功能。Ping测试模块:该模块是本程序的核心模块,调用其他模块实现其功能,进而实现Ping的功能。

4.流程图:

5.实验中遇到的问题及解决方案:

问题1:提示库函数名为未标示符?

分析:在程序开头只有以下头文件,

#include

#include

#include

忘记打开头文件;

问题2:提示出现内存(ox000000)错误?

分析:void DecodeICMPHeader(char *buf, int bytes, SOCKADDR_IN *from)

buf动态指针指向错误。

问题3:连接时所有有关winsock的库函数连接不上?

分析:一定是缺少了某个头文件或没打开动态库,解决办法是在开头加上一下代码:#pragma comment(lib,"ws2_32.lib");

实验三

1.实验名称:基于IP多播组的网络会议

2.实验内容:了解IP多播的基本原理,参照局域网IP多播程序,设计一个简易的网络会议程序。

3.实验目的:1、加深对计算机局域网IP多播工作原理的理解,通过编写计算机程序实现、模拟其功能,使学生理解并掌握其基本原理及工作过程。2、提高网络编程和应用的能力。提高实际编程能力和灵活运用所学知识解决问题的能力。

4.实验要求:编写一个简易的局域网IP多播网络会议程序,理解IP多播的基本概念和工作原理,程序由Sender和Receiver两个部分组成,Sender用户从控制台上输入多播发送数据,Receiver端都要求加入同一个多播组,完成接收Sender发送的多播数据。

5.实验原理:IP多播技术,也常称为组播通信,它是基于IP层的通信技术。是一种允许一台或多台主机(多播源)发送单一数据包到多台主机(一次的,同时的)的TCP/IP网络技术,是一点对多点的通信。采用多播通信技术,不仅可以实现一个发送者和多个接收者之间进行通信的功能,而且可以有效减轻网络通信的负担,避免资源的无谓浪费。并不是所有的协议都支持多播通信,通常多播通信应用都建立在TCP/IP协议之上,IP地址采用D类地址来支持多播,由特殊的多播路由器来实现。

IP多播提供两类服务:

1) 向多个目的地址传送数据。有许多向多个接收者传送信息的应用:例如交互式会议系统和向多个接收者分发邮件或新闻。如果不采用多播,目前这些应用大多采用TCP来完成(向每个目的地址传送一个单独的数据复制)。然而,即使使用多播,某些应用可能继续采用TCP 来保证它的可靠性。

2) 客户对服务器的请求。例如,无盘工作站需要确定启动引导服务器。目前,这项服务是通过广播来提供的,但是使用多播可降低不提供这项服务主机的负担。

6.实验过程:

1、启动Visual C++6.0,创建一个控制台项目工程。在此项目工程中添加Sender和Receiver 两个项目。

Receiver项目实现步骤: