计算机网络课程设设计-Ping程序与Echo程序的设计与实现

上传人:aa****6 文档编号:29272446 上传时间:2018-01-23 格式:DOC 页数:29 大小:110.50KB
返回 下载 相关 举报
计算机网络课程设设计-Ping程序与Echo程序的设计与实现_第1页
第1页 / 共29页
计算机网络课程设设计-Ping程序与Echo程序的设计与实现_第2页
第2页 / 共29页
计算机网络课程设设计-Ping程序与Echo程序的设计与实现_第3页
第3页 / 共29页
计算机网络课程设设计-Ping程序与Echo程序的设计与实现_第4页
第4页 / 共29页
计算机网络课程设设计-Ping程序与Echo程序的设计与实现_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《计算机网络课程设设计-Ping程序与Echo程序的设计与实现》由会员分享,可在线阅读,更多相关《计算机网络课程设设计-Ping程序与Echo程序的设计与实现(29页珍藏版)》请在金锄头文库上搜索。

1、计算机网络课程设计题 目 Ping 程序与 Echo 程序的设计与实现 系 部 商学系 专 业 信息管理与信息系统 班 级 信息 N122 学 号 学生姓名 指导教师 编写日期 2014.12.25 1目录1. 目的 .22. 要求 .23. 知识 .34. 分析 .35. 代码 .96. 结果 .307. 心得 .3021. 目的通过设计 Ping 程序,讲解 Ping 程序的实现原理,并初步讲解了 c 语言网络编程技术。本章涉及很多网络编程函数和编程技巧。包括库文件的导入;winsock 的初始化、注销;socket 的创建、关闭;设置 socket 选项;根据主机名获取 IP 地址; 从

2、堆中分配一定数量的空间、释放从堆中分配的空间;获取当前进程 ID 号;数据报的发送;数据报的接等。Echo 程序的功能是客户端向服务器发送一个字符串,服务器不做任何处理,直接把字符串返还给客服端,Echo 程序是最为基本的客户端/ 服务器程序。a、 通过 Echo 程序是学生掌握网络编程的基本知识和基本技能;b、 通过跟踪运行 java 包,使学生了解网络编程实现的细节。课程设计内容:本实验要求实现 Echo 程序,具有内容及要求如下:a、 分析 Echo 程序的功能,其功能包括:客户端输入一个字符串;服务器端接收到这个字符串后,直接把这些字符串发送给客户端;客户端在接收到这个字符串后把字符串

3、现实出来。b、 设计实现 Echo 程序,包括客户端和服务器程序。c、 跟踪运行 java 包。2. 要求(1)实现 ping 功能。程序能实现基本的 ping 操作,发送 ICMP 回显请求报文,接收显应答报文。(2)能记录路由。程序提供了“-r”选项,用以记录从源主机到目的主机的路由。(3)能输出指定条数的记录。程序提供了“-n”选项,用以输出指定条数的记录。(4)能按照指定大小输出每条记录。程序提供了“datasize”选项,用以指定输出的数据报的大小。(5)能输出用户帮助。程序提供了用户帮助,显示程序提供的选项以及选项格式等。3Echo 程序的实现主要是利用 java 网络程序包中的服

4、务器套接字(ServersSocket)和客户端套接字( Socket)来实现,思路如下:根据制定的端口创建服务器套接字,并阻塞客户的连接;根据 EchoService 所以主机名和侦听端口创建客户端套接字;向客户端套接字输出流中写入一个字符串;服务器套接字接收到连接请求,从服务器套接字输入流中读取该字符串;服务器套接字不做任何修改,直接把该字符串写入服务器套接字输出流中;客户端套接字从输入流中接收到 该字符串,直接打印到终端。3. 知识ping 命令是使用频率极高的一个网络测试命令,用以测试从一个主机到另一个主机间的网络上否可达。windows 自带的 ping 命令具有强大的功能,它有很多

5、选项用于实现不同的测试目的。本章模仿 windows 的 ping 命令,用 c 语言实现了一个简单的命令。本章着重讲述 ping 命令的实现原理和 c 语言的网络编程方法。读者可以在本章的基础上,对本章实现的 ping 命令进行扩展,开发出功能更强大、更完善的 ping 命令,并进一步掌握网络编程的方法。4. 分析1. 功能模块图本系统共有 4 个模块,分别是初始化模块、功能控制模块、数据控制模块、数据报解读模块和 ping 测试模块,如图 9.1 所示。各模块功能描述如下。4Ping 程序设计初始化模块数ping命令是使用频率极高的一个网络测试命令,用以测试从一个主机到另一个主机间的网络上

6、否可达。windows 自带的ping命令具有强大的功能,它有很多选项用于实现不同的测试目的。本章模仿windows 的ping命令,用 c语言实现了一个简单的命令。本章着重讲述ping命令的实现原理和c 语言的网络编程方法。读者可以在本章的基础上,对本章实现的ping命令进行扩展,开发出功能更强大、更完善的ping命令,并进一步掌握网络编程的方法据报解读模块功能控制模块Ping测试模块图 4.1 系统模块图(1) 初始化模块。改模块用于初始化各个全局变量,为全局变量赋初始值;初始化,加载库。(2)功能控制模块。改模块是被其它模块调用,其功能包括获取参数、计算校验和填充数据报文、释放占用资源和

7、显示用户帮助。(3)数据报解读模块。改模块用于解读接收到的报文和选项。(4)测试模块。改模块是本程序的核心模块,调用其他模块实现其功能,主要是实现的功能。2系统流程图系统执行的流程图 9.2 所示。程序首先调用 IniPing()函数初始化各全局变量,然后 GetArgments()函数获取用户输入的参数,检查用户输入的参数,如果参数不正确或者没有输入参数,则显示用户帮助信息(User help ),并结束程序;如果参数正确,则对指定目的地执行 Ping 命令,如果 Ping 通,则显示 Ping 结果并释放占用资源,如果没有 Ping 通,则报告错误信息,并释放占用资源。5开始初始化个变量获

8、取参数信息输入参数是否正确?Ping 目的地Ping 成功?输出 Ping 结果释放占用资源结束输出错误信息显示帮助信息图 4.2 系统流程图3.参数获取(GetArgments() 函数)流程图获取的参数包括“-r” (记录路由) 、 “-n”(记录条数程序,任意的整数)和datasize(数据报大小)。程序首先判断每一个参数的第一字符,如果第一个字符是“-” (短横线) ,则认为是“-r”或者“-n ”中的一个,然后作进一步判断。如果该参数的第二个字符是数字,则判断该参数为记录的条数,如果该参数的6第二个字符是“r” ,则判断该参数为“-r” , 用于记录路由;如果参数的第一个字符是数字,

9、则认为 参数是 IP 地址;或者 datasize,然后作进一步的判断。如果该参数中不存在非数字的字符, 则判断该参数为 datasize;如果存在非数 字的字符,则判断该参数为 IP 地址;其他情况则判断为主机名。参数获取的流程如图所示:开始Argc=1?检查第一 i 个参数的第一个字符是“-”?检查第一 i 个参数的第二个字符是数字?该参数表示要获取的记录数转换成十进制记录到全局变量 packetNUM还有参数?结束是数字?该参数中有非数字字符?该参数表示IP 地址该参数表示数据报大小该参数表示主机名是“r”?显示用户帮助 设标志位 RecordFlag 为 tureI=i+1记录到变量L

10、pdest 中记录到变量Datasize 中记录到变量Lpdest 中图 4.3 参数获取流程图74.ping()函数流程图ping()函数是本程序的核心部分它调用其他模块的函数来实现,其主要步骤包括创建接字,设置路由选项(如果需要的话) 、设置接收和发送超时值、名字解析(如果需要的话) 、分配内存、创建 ICMP 报文、发送 ICMP 请求报文、接收 ICMP 应答报文和解读 ICMP 报文。其执行流程如图 4.4 所示。8开始创建原始套接字创建成功?记录路由?设置接收和发送超时值为每个 ICMP 设置路由选项设置成功?名字解析?根据主机名获取各种参数获取成功?设置目的地址各项字段根据 IC

11、MP 报文大小分配内存分配成功创建 ICMP 报文发送 ICMP 请求发送成功?超时发送?输出超时发送 接收 ICMP 应答输出失败信息9接收成功?超时接收?输出失败信息 输出超时接收 读取 ICMP 数据报文记录数达到指定值?图 4.4 Ping 函数流程图5. 代码Ping 的代码:#pragma comment(lib, ws2_32.lib)1. 程序预处理/*导入库文件*/#pragma comment( lib, ws2_32.lib )/*加载头文件*/#include #include #include #include #include /*定义常量*/10/*表示要记录路由

12、*/#define IP_RECORD_ROUTE 0x7/*默认数据报大小*/#define DEF_PACKET_SIZE 32 /*最大的 ICMP 数据报大小*/#define MAX_PACKET 1024 /*最大 IP 头长度*/#define MAX_IP_HDR_SIZE 60 /*ICMP 报文类型,回显请求*/ #define ICMP_ECHO 8/*ICMP 报文类型,回显应答*/ #define ICMP_ECHOREPLY 0/*最小的 ICMP 数据报大小*/#define ICMP_MIN 8/*自定义函数原型*/void InitPing();void UserHelp();void GetArgments(int argc, char* argv); USHORT CheckSum(USHORT *buffer, int size);void FillICMPData(char *icmp_data, int datasize);void Free

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号