网络课程设计(PING程序代码和FTP)_第1页
网络课程设计(PING程序代码和FTP)_第2页
网络课程设计(PING程序代码和FTP)_第3页
网络课程设计(PING程序代码和FTP)_第4页
网络课程设计(PING程序代码和FTP)_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机网络课程设计报告课 程 计算机网络课程设计 实验名称1 _ping程序设计_实验名称2 文件传输协议的简单设计与实现_专业班级 姓 名 学 号 同组人姓名 _ 2008 年 12 月 28 日目录一ping 1.实验目的和要求 32.实验环境 43.程序的实现方法和方案 53.1ping原理 53.2.设计方案 53.3设计流程图 64. 程序源代码 95.实验数据、结果分析 126.思考题 127.心得体会 13二FTP1FTP实验内容、目的 14 1.1流程图 16 1.2服务端. 17 1.3客户端232 实验数据、结果分析.293 思考题 314 心得体会 . 32三 参考文献.

2、33广东工业大学本科生课程设计任务书题目名称PING程序设计学 院自动化专业班级姓 名学 号一、实验目的和要求实验目的: PING程序是我们使用的比较多的用于测试网络连通性的程序。PING程序基于ICMP,使用ICMP的回送请求和回送应答来工作。由计算机网络课程知道,ICMP是基于IP的一个协议,ICMP包通过IP的封装之后传递。课程设计中选取PING程序的设计,其目的是希望同学们通过PING程序的设计,能初步掌握TCP/IP网络协议的基本实现方法,对网络的实现机制有进一步的认识。实验内容和要求:1、RAW模式的SOCKET编程PING程序是面向用户的应用程序,该程序使用ICMP的封装机制,通

3、过IP协议来工作。为了实现直接对IP和ICMP包进行操作,实验中使用RAW模式的SOCKET编程。熟悉SOCKET的编程,包括基本的系统调用如SOCKET、BIND等;2、具体内容1. 定义数据结构需要定义好IP数据报、ICMP包等相关的数据结构;2. 程序实现在WINDOWS环境下实现PING程序;3. 程序要求在命令提示符下输入: PING .其中为目的主机的IP地址,不要求支持域名,对是否带有开关变量也不做要求。不带开关变量时,要求返回4次响应。返回信息的格式: REPLY FROM .或 REQUEST TimeOut (无法PING通的情况)。二、实验环境Pc机一台(可以与其他机联通

4、或者可以上网)操作系统为windows xp软件为vc6.0Windows 环境下三、实验方法、步骤及结构测试实验按下述步骤进行:1) 熟悉IP以及ICMP协议的工作机制2) 熟悉RAW模式的SOCKET编程3) 编写PING的实现程序4) 编译环境中需要包括SOCKET库 WS2_32.lib5) 在模拟实现环境下调试并运行自己编写的PING程序6) 保留你实现的程序在你的用户目录下,以备辅导教师检查7) 最后提交源程序,撰写实验报告四、课程设计(论文)进程安排序号设计(论文)各阶段内容地点起止日期1了解实验内容,查找资料 实验室,图书馆12.222查找资料,了解各个函数的内容图书馆宿舍12

5、.233调试,解决各段函数的错误,实现各项功能宿舍12.244小组交流,交换各自意见宿舍12.255答辩实验室12.266完成设计报告,并加深对设计的了解宿舍12.27五、应收集的资料及主要参考文献1程良伦,网络工程概论,机械工业出版社,20072张越 等,Visual C+网络程序设计实例详解,人民邮电出版社,20063Andrew S Tanenbaum 著 潘爱民 译 ,计算机网络(第四版),清华大学出版社,20044谢希仁,计算机网络(第四版),电子工业大学,20065 王宏C编程设计方案教程清华大学出版社:2002: 6 夏华香C#编程技巧具体案例解析中国电力出版社:2005:发出任

6、务书日期:2008年 月 日 指导教师签名:计划完成日期: 2008年 月 日基层教学单位责任人签章:主管院长签章:一、 ping的实现方法和方案: 1.1 ping的原理: Ping命令不仅存在Windows系统上,在Unix系统上也有Ping命令,其实对其他只要是支持网络的操作系统,一般也都存在该命令。Ping命令的主要作用是检测网络上主机的状态。要是在几年前,我们还可以下如此断言,如果不能Ping通某台主机,那么也就无法Telnet或者FTP到这台主机,但随着互联网的安全意识的增加,出现了访问控制清单的路由器和防火墙,由于ICMP报文是在IP数据包中被传输的,而到达一台主机不仅取决于IP

7、层是否到达,还取决于使用何种协议和端口。譬如金山公司的金山网镖就可以禁止其他机器Ping通这台主机。所以在现在的情况下,即时Ping不通某台机器,但也有可能FTP登陆到这台机器,或者通过HTTP来浏览这台机器上的Web页面 定义IP数据报、ICMP包等相关的数据结构如下: / IP 头结构typedef struct iphdr unsigned int h_len:4; / 首部长度 unsigned int version:4; / IP版本 unsigned char tos; / 服务类型 unsigned short total_len; / 包总长度 unsigned short

8、ident; /标识符 unsigned short frag_and_flags; / 标志 unsigned char ttl;/ 生存周期 unsigned char proto; / protocol (TCP, UDP etc) 协议类型 unsigned short checksum; /IP检验和 unsigned int sourceIP;/源地址IP unsigned int destIP;/目的地址IPIpHeader;/ ICMP 头结构typedef struct icmphdr BYTE i_type;/类型 BYTE i_code; / 代码类型 USHORT i_

9、cksum;/检验和 USHORT i_id;/地址 USHORT i_seq;/发送顺序 /* This is not the std header, but we reserve space for time */ ULONG timestamp;/接受时间IcmpHeader;1.2设计方案: ping-n count -r count-n count 发送 count 指定的 ECHO 数据包数。默认值为 4。 -r count 在记录路由字段中记录传出和返回数据包的路由。count 可以指定最少 1 台,最多 9 台计算机。 Ping的返回信息有Request Timed Out、D

10、estination Net Unreachable和Bad IP address还有Source quench received。 Request Timed Out这个信息表示对方主机可以到达到TIME OUT,这种情况通常是为对方拒绝接收你发给它的数据包造成数据包丢失。大多数的原因可能是对方装有防火墙或已下线。 Destination Net Unreachable这个信息表示对方主机不存在或者没有跟对方建立连接。这里要说明一下destination host unreachable和time out的区别,如果所经过的路由器的路由表中具有到达目标的路由,而目标因为其它原因不可到达,这时

11、候会出现time out,如果路由表中连到达目标的路由都没有,那就会出现destination host unreachable。 Bad IP address 这个信息表示你可能没有连接到DNS服务器所以无法解析这个IP地址,也可能是IP地址不存在。 Source quench received信息比较特殊,它出现的机率很少。它表示对方或中途的服务器繁忙无法回应。 开始结束iargc?if(*)switch()bRecordRoute=trueusage(*)if(*)datasize=atoi(argvi)ipdest=argvi1.3程序实现流程图如下: rdefault成立成立 否成立

12、否否图(ValidateArgs)开始iptr/4?If(host)?Inaddr,h_nameinaddr结束成立不成立 成立不成立开始Iphdrlen&!icmpcountDecodeIPoptions()bytesh_addr, hp-h_length);/创建首部长度的内存存储发送地址dest.sin_family = hp-h_addrtype;/设置系统主机系统套接字printf(dest.sin_addr = %sn, inet_ntoa(dest.sin_addr);/打印发送地址elseprintf(gethostbyname() failed: %dn,WSAGetLast

13、Error();/打印失败信息return -1;/ Create the ICMP packet/datasize += sizeof(IcmpHeader);icmp_data = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, MAX_PACKET); /为icmp_data分配内存recvbuf = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, MAX_PACKET); /为recvbuf分配内存if (!icmp_data)/判断分配内存是否成功printf(HeapAlloc() failed

14、: %dn, GetLastError();/打印失败信息return -1;memset(icmp_data,0,MAX_PACKET);/把icmp_data内存清空FillICMPData(icmp_data,datasize);/调用函数填写ICMP包数据while(1)/用循环控制发送数量static int nCount = 0;/设置静态变量,记录发送报文的数量int bwrote;if (nCount+ = 4)/判断是否已经发送了4个报文,是的话退出整个循环break;(IcmpHeader*)icmp_data)-i_cksum = 0;/先把ICMP的检验和置零(Icmp

15、Header*)icmp_data)-timestamp = GetTickCount();/获取当前时间(IcmpHeader*)icmp_data)-i_seq = seq_no+;/发送顺序加一(IcmpHeader*)icmp_data)-i_cksum =checksum(USHORT*)icmp_data, datasize); /计算检验和bwrote = sendto(sockRaw, icmp_data, datasize, 0,(struct sockaddr*)&dest, sizeof(dest); 创建发送套接字if (bwrote = SOCKET_ERROR)/判

16、断错误if (WSAGetLastError() = WSAETIMEDOUT)printf(timed outn);/判断超时错误continue;printf(sendto() failed: %dn, WSAGetLastError();/判断发送失败错误return -1;if (bwrote datasize)/比较发送数据报的大小printf(Wrote %d bytesn, bwrote);/打印发送数据报的大小bread = recvfrom(sockRaw, recvbuf, MAX_PACKET, 0,(struct sockaddr*)&from, &fromlen);

17、/创建接受套接字if (bread = SOCKET_ERROR)/判断失败原因if (WSAGetLastError() = WSAETIMEDOUT)printf(timed outn);/判断打印超时错误continue;printf(recvfrom() failed: %dn, WSAGetLastError();/判断接收失败return -1;DecodeICMPHeader(recvbuf, bread, &from);/查看ICMP回显应答报文 打印相关信息Sleep(1000);/等待1秒重复发送ICMP回显请求报文if (sockRaw != INVALID_SOCKET

18、)closesocket(sockRaw);/判断套接字进程不为空时关闭进程HeapFree(GetProcessHeap(), 0, recvbuf);/释放存放接收信息的内存HeapFree(GetProcessHeap(), 0, icmp_data);/释放icmp_data内存WSACleanup();注销Windows Socketsreturn 0;四、实验数据、结果分析当ping或者主机的时候 就会默认循环次数4次。然后数据包大小为32。加上头文件32总共64个字节。丢包率为0。可以拓展功能还可以自定义循环次数和数据大小。五、思考题1. 本题目只要求实现PIN

19、G的一些简单功能,在Windows命令行模式下,输入“Ping”回车,查看PING的所有功能,考虑如何实现这些功能。答:PING的主要功能是用来检测网络的连通情况和分析网络速度。使用Ping检查连通性有五个步骤: 1. 使用ipconfig /all观察本地网络设置是否正确; 2. Ping , 回送地址Ping回送地址是为了检查本地的TCP/IP协议有没有设置好; 3. Ping本机IP地址,这样是为了检查本机的IP地址是否设置有误; 4. Ping本网网关或本网IP地址,这样的是为了检查硬件设备是否有问题,也可以检查本机与本地网络连接是否正常;(在非局域

20、网中这一步骤可以忽略) 5. Ping远程IP地址,这主要是检查本网或本机与外部的连接是否正常。2.如果一台主机能ping通自己但网络不通,可能是什么原因?答:DNS设置的不对,代理没有设置好,IP没有配置好 ,再或者就是中了病毒,arp病毒, 还有就是有可能有人用了一些网管软件3.考虑Netstat、Traceroute、ipconfig等网络测试应用程序的工作原理以及使用。答:netstat命令的功能是显示网络连接、路由表和网络接口信息,可以让用户得知目前都有哪些网络连接正在运作。 该命令的一般格式为: netstat 一般有多个命令。Traceroute最简单的基本用法是:tracero

21、ute hostnameipconfig-当使用IPConfig时不带任何参数选项,那么它为每个已经配置了的接口显示IP地址、子网掩码和缺省网关值六、心得体会开始接到网络编程的课程设计一点都不懂,再加上要用C语言编程,更不知该从何下手。由于考虑都时间关系,我们小组4人再分成两组分别进行,分别开始对两个设计的工作。我主要负责的就是ping程序的设计。在图书馆查找了资料,在网上搜索了许多相关资料后,才开始对各个函数的理解。参考了同学的程序,在对每个函数与其参数进行了理解,最后才基本上了解了整个过程,并且可以在此基础上添加一些功能等。广东工业大学课程设计任务书题目名称文件传输协议的简单设计与实现学生

22、学院自动化学院专业班级网络工程3班姓 名学 号一、 实验目的文件传送是各种计算机网络都实现的基本功能,文件传送协议是一种最基本的应用层协议按照客户/服务器的模式进行工作,提供交互式的访问,是INTERNET使用最广泛的协议之一。本实验的目的是,学会利用已有网络环境设计并实现简单应用层协议,掌握TCP/IP 网络应用程序基本的设计方法和实现技巧。二、 实验内容和要求1、实验内容我们的计算机网络实验环境建立在TCP/IP 网络体系结构之上。各计算机除了安装TCP/IP 软件外,还安装了TCP/IP 开发系统。实验室各计算机具备Windows环境中套接字socket 的编程接口功能,可为用户提供全网

23、范围的进程通信功能。本实验要求学生利用这些功能,设计和实现一个简单的文件传送协议。2、具体要求用socket 编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c),该程序应能实现下述命令功能:get:取远方的一个文件put:传给远方一个文件pwd:显示远主当前目录dir:列出远方当前目录cd :改变远方当前目录? :显示你提供的命令quit :退出返回三、 实验主要仪器设备和材料Pc机一台(可以与其他机联通或者可以上网)操作系统为windows xp软件为vc6.0Windows 环境下四、 实验方法、步骤及结构测试1) 关于端口号(假设用SERV_PORT

24、 来表示)的设定,原则上2000 至5000都可用,为避免冲突,建议取你学号后三位数加上2000,比如学号为,则可定义: #define SERV_PORT 22342) 客户和服务程序中要有相应的include 文件(参考所给例子程序)3) 有些同学的server 方程序支持多连接,为了不占用更多的系统资源,并发连接数限制在3 个以内。4) 最后提交源程序,撰写实验报告,在实验报告中说明设计的思路。五、 课程设计进程安排序号设计(论文)各阶段内容地点起止日期1了解实验内容,查找资料 实验室,图书馆12.222查找资料,了解各个函数的内容图书馆宿舍12.233调试,解决各段函数的错误,实现各项

25、功能宿舍12.244小组交流,交换各自意见宿舍12.255答辩实验室12.266完成设计报告,并加深对设计的了解宿舍12.27六、 应收集的资料及主要参考文献1程良伦,网络工程概论,机械工业出版社,20072张越 等,Visual C+网络程序设计实例详解,人民邮电出版社,20063Andrew S Tanenbaum 著 潘爱民 译 ,计算机网络(第四版),清华大学出版社,20044谢希仁,计算机网络(第四版),电子工业大学,20065 王宏C编程设计方案教程清华大学出版社:2002: 6 夏华香C#编程技巧具体案例解析中国电力出版社:2005:发出任务书日期:2008年 月 日 指导教师签

26、名:计划完成日期: 2008年 月 日基层教学单位责任人签章:主管院长签章:一、 文件传输协议(FTP)的实现原理程序实现方法和方案流程图如下: 服务端 监听进入循环 socket开始Rc0建立线程分块多线程NY打印错误信息客户函数开始YN关闭读取aa0NN读取函数Return -1Y返回文件长度Case0读信息其他错误,关闭转为文件类型Case2 传文件 读文件打开文件并传输发出请求客户端:发送命令服务器监听返回Case 0Return -1读信息Case 2发送等待 服务器接收信息开启下载NY记录文件断点续传第一次传输建立线程下载后自动结束主要函数说明:服务器端由于要实现多线程,必须把功能

27、独立出来,且包装成线程,首先建一个监听线程,主要负责接入客户,并启动另一个客户线程。具体程序如下:(其中包括一些说明)/包含需要用到的头文件#include Winsock.h#include windows.h#include stdio.h#include time.h#include #define RECV_PORT 2000#define SEND_PORT 3000#pragma comment(lib, wsock32.lib)SOCKET sock;char filename20;sockaddr_in ServerAddr;char rbuff1024;char sbuff1

28、024;char IIP20;/处理help命令void help() cout*COMMANDS help*endl *命令*作用*endl ?或者help.显示你提供的所有命令 endl dir.显示远方当前目录的文件 endl cd.改变远方当前目录和路径 endl cd的用法(进入下级目录): cd 路径名 endl cd的用法(进入上级目录): cd . endl get.下载(接受)文件 endl get的用法: get 文件名 endl put.上传(发送)文件 endl put的用法:put 文件名 endl quit.退出 endl *endl;/处理dir命令void li

29、st(SOCKET sockfd) int nRead; while(true) nRead=recv(sock,rbuff,1024,0); if(nRead=SOCKET_ERROR) printf(read response error!n); exit(1); if(nRead=0)/数据读取结束 break; /显示数据 rbuffnRead=0; printf(%s,rbuff); int SendFile(SOCKET datatcps,FILE* file) printf(sending file data.); for(;) /从文件中循环读取数据并发送客户端 int r=f

30、read(sbuff,1,1024,file); if(send(datatcps,sbuff,r,0)=SOCKET_ERROR) printf(lost thr connection to client!n); closesocket(datatcps); return 0; if(r1024)/文件传送结束 break; closesocket(datatcps); printf(donen); return 1;/初始化scoketDWORD StartSock()WSADATA WSAData;char a20;memset(a,0,20);if(WSAStartup(MAKEWOR

31、D(2,2),&WSAData)!=0)printf(sock init fail!n);return (-1);if(strncmp(IIP,a,20)=0)printf(请输入连接的主机号:);scanf(%s,&IIP);ServerAddr.sin_family=AF_INET;ServerAddr.sin_addr.s_addr=inet_addr(IIP);ServerAddr.sin_port=htons(RECV_PORT);return(1);/创建套接字DWORD CreateSocket()sock=socket(AF_INET,SOCK_STREAM,0);if(soc

32、k=SOCKET_ERROR)printf(sock create fail! n);WSACleanup();return(-1);return(1);/发送连接请求DWORD CallServer() CreateSocket();if (connect(sock,(struct sockaddr *)&ServerAddr,sizeof(ServerAddr)=SOCKET_ERROR)printf(Connect fail n);memset(IIP,0,20);return(-1);return(1); /发送命令DWORD TCPSend(char data) int length

33、;length=send(sock,data,strlen(data),0);if(length0) fwrite(rbuff,sizeof(char),count,fd); fclose(fd);/getif(strncmp(rbuff,put,3)=0)strcpy(filename,rbuff+9); fd2=fopen(filename,rb);if(fd2)if(!SendFile(sock,fd2) printf(send failed!);return 0; fclose(fd2);else/打开文件失败 strcpy(sbuff,cant open file!n); if(se

34、nd(sock,sbuff,1024,0) return 0;/putif(strncmp(rbuff,dir,3)=0)list(sock);/dirif(strncmp(rbuff,cd,2)=0)closesocket(sock);WSACleanup();/cdreturn main();/main二、客户端先连接服务器,接着发送命令1(给我文件信息),其中包括文件长度,名字等,然后根据长度决定分几个线程下载,并初使化下载进程,接着发送命令2(可以给我传文件了),并记录文件进程。最后,收尾。/程序要用到的一些头文件以及定义的结构#include Winsock.h#include windows.h#include stdio.h#define RECV_PORT 2000#define SEND_PORT 3000#pragma comment(lib, wsock32.lib)SOCKET sock,sock1,sockdir,sockput,sockget;sockaddr_in ServerAddr;sockaddr_in ClientAddr;int Addrlen;/地址

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论