广工计算机网络课设基于UDP的ping.docx

上传人:b****7 文档编号:11042468 上传时间:2023-02-24 格式:DOCX 页数:22 大小:261.43KB
下载 相关 举报
广工计算机网络课设基于UDP的ping.docx_第1页
第1页 / 共22页
广工计算机网络课设基于UDP的ping.docx_第2页
第2页 / 共22页
广工计算机网络课设基于UDP的ping.docx_第3页
第3页 / 共22页
广工计算机网络课设基于UDP的ping.docx_第4页
第4页 / 共22页
广工计算机网络课设基于UDP的ping.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

广工计算机网络课设基于UDP的ping.docx

《广工计算机网络课设基于UDP的ping.docx》由会员分享,可在线阅读,更多相关《广工计算机网络课设基于UDP的ping.docx(22页珍藏版)》请在冰豆网上搜索。

广工计算机网络课设基于UDP的ping.docx

广工计算机网络课设基于UDP的ping

《计算机网络》课程设计

 

学院____计算机学院_______

专业______软件工程_______

年级班别______12级4班_______

学号91

学生姓名______林炳城______

指导教师____梁路________

成绩

计算机网络课程设计任务书

设计题目

编程实现基于UDP的PING(Java)

已知技术参数和设计要求

1.编程实现PING的服务器端和客户端,实现操作系统提供的ping命令的类似功能。

2.服务器端PingServer功能:

可以显示用户通过客户端发送来的消息内容(包含头部和payload);

能够模拟分组的丢失;能够模拟分组传输延迟;

将用户发送来的请求request在延迟一段随机选择的时间(小于1s)后返回给客户端,作为收到请求的响应reply;

通过如下命令行启动服务器:

javaPingServerport。

port为PingServer的工作端口号

3.客户端PingClient功能:

启动后发送10个request。

发送一个request后,最多等待1秒以便接收PingServer返回的reply消息。

如果在该时间内没有收到服务器的reply,则认为该请求或对该请求的reply已经丢失;在收到reply后立即发送下一个request。

请求消息的payload中至少包含关键字PingUDP、序号、时间戳等内容。

如:

PingUDPSequenceNumberTimeStampCRLF

其中:

CRLF表示回车换行符(0X0D0A);TimeStamp为发送该消息的机器时间。

为每个请求计算折返时间(RTT),统计10个请求的平均RTT、最大/小RTT。

通过如下命令行启动:

javaPingClienthostport。

host为PingServer所在的主机地址;port为PingServer的工作端口号

设计内容与步骤

1.学习ICMP,了解ping命令的工作机理;

2.学习JavaUDPSocket通信机制;

3.了解Java多线程程序设计;

4.服务器PingServer程序设计;

5.客户端PingClient程序设计。

6.调试与演示

设计工作计划与进度安排

命令工作机制学习2小时

UDPSocket通信机制2小时

多线程程序设计4小时

程序设计6小时

程序设计12小时

6.调试与演示4小时

6.课程设计说明书10小时

一、设计环境

操作系统:

win8

开发环境:

IDE:

eclipse

二、课程设计的目的

本次课程设计的目的在掌握计算机网络理论的基础上,了解网络技术,掌握计算机网络相关设计方法和思想,希望能通过本次的课程设计,达到巩固和综合应用计算机网络原理和知识,本次课程设计主要是编程实现基于UDP的ping,使用java语言编程,编写一个实验程序、仿真模拟Ping命令,通过观察实验结果,从而判定本次程序设计是否成功完成任务。

三、理论基础

UDP简介

UDP是UserDatagramProtocol的简称,中文名是用户数据包协议,是OSI(OpenSystemInterconnection,开放式系统互联)参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETFRFC768是UDP的正式规范。

UDP在IP报文的协议号是17。

UDP协议全称是用户数据报协议[1],在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。

在OSI模型中,在第四层——传输层,处于IP协议的上一层。

UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。

UDP用来支持那些需要在计算机之间传输数据的网络应用。

包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。

UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。

与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。

根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。

UDP协议的主要作用是将网络数据流量压缩成数据包的形式。

一个典型的数据包就是一个二进制数据的传输单位。

每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。

ping简介

Ping是Windows下的一个命令在Unix和Linux下也有这个命令。

ping也属于一个通信协议,是TCP/IP协议的一部分。

利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障。

应用格式:

Ping空格IP地址。

该命令还可以加许多参数使用,具体是键入Ping按回车即可看到详细说明。

PING(PacketInternetGroper),因特网包探索器,用于测试网络连接量的程序。

Ping发送一个ICMP(InternetControlMessagesProtocol)即因特网信报控制协议;回声请求消息给目的地并报告是否收到所希望的ICMPecho(ICMP回声应答)。

它是用来检查网络是否通畅或者网络连接速度的命令。

作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:

利用网络上机器IP地址的唯一性,给目标IP地址发送一个数据包,再要求对方返回一个同样大小的数据包来确定两台网络机器是否连接相通,时延是多少。

ping指的是端对端连通,通常用来作为可用性的检查,但是某些病毒木马会强行大量远程执行ping命令抢占你的网络资源,导致系统变慢,网速变慢。

严禁ping入侵作为大多数防火墙的一个基本功能提供给用户进行选择。

通常的情况下你如果不用作服务器或者进行网络测试,可以放心的选中它,保护你的电脑。

四、基本要求

编程实现PING的服务器端和客户端,实现操作系统提供的ping命令的类似功能。

服务器端PingServer功能:

可以显示用户通过客户端发送来的消息内容(包含头部和payload);

能够模拟分组的丢失;能够模拟分组传输延迟;

将用户发送来的请求request在延迟一段随机选择的时间(小于1s)后返回给客户端作为收到请求的响应reply;

通过如下命令行启动服务器:

javaPingServerport。

port为PingServer的工作端口号

客户端PingClient功能:

启动后发送10个request。

发送一个request后,最多等待1秒以便接收PingServer返回的reply消息。

如果在该时间内没有收到服务器的reply,则认为该请求或对该请求的reply已经丢失;在收到reply后立即发送下一个request。

请求消息的payload中至少包含关键字PingUDP、序号、时间戳等内容。

如:

PingUDPSequenceNumberTimeStampCRLF其中:

CRLF表示回车换行符(0X0D0A);TimeStamp为发送该消息的机器时间。

为每个请求计算折返时间(RTT),统计10个请求的平均RTT、最大/小RTT。

通过如下命令行启动:

javaPingClienthostport。

host为PingServer所在的主机地址

port为PingServer的工作端口号

五、设计思想

UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据包,在OSI模型中,在第四层----传输层,处于IP协议的上一层,UDP有不提供数据报分组、组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知是否安全完整的到达目的地。

这个课设通过调用javaJDK中包下的DatagramSocket和DatagramPacket类,可以实现对用户数据报文的控制,DatagramSocket类用于创建接收和发送UDP的Spcket实例,调用DatagramPacket类用于处理报文,因为它可以将Byte数组、目标地址、目标端口等数据包装成报文或者将报文拆卸成Byte数组。

通过调用DatagramSocket和DatagramPacket类来实现操作系统提供的ping命令的类似功能。

编程实现基于UDP的ping的思想可以概括为几点:

服务器端PingServer功能:

可以并发地为多个用户服务;

显示用户通过客户端发送来的消息内容(包含头部和payload);

将用户发送来的请求在延迟一段时间后返回给客户端,作为收到请求的相应。

通过javaPingServer9999(端口号可以任意选择)命令行来启动服务器。

客户端PingClient功能:

启动都发送10个请求,发送一个请求后,最多等待1秒以便接收PingServer返回的响应消息。

请求消息的payload中包含有关键字PingUDP、序号、时间戳等内容。

为每个请求计算折返时间(RTT),统计10个请求的平均RTT、min/max的RTT。

通过javaPingClientlocalhost(本机IP地址)9999命令行启动。

程序设计流程图

根据课程设计的要求,结合程序设计流程,本次设计按如下的流程进行

六、源程序

服务器端代码

import*服务器端

*@authorLinBingcheng

*/

publicclassPingServerextendsThread{

privateintinitPort;ubstring(0,100);//将数据从缓冲区轮换成字符串

}

InetAddresshost=();//获取客户端的ip地址

intport=();//获取客户端的通讯端口

buffer=();//请求数据转换成byte数组,用于发回客户端

DatagramPacketsendPacket=newDatagramPacket(buffer,,

host,port);//生成数据包,已经保存好发送目的地的地址和端口了

try{

(sendPacket);//发送数据给客户端

}catch(Exceptione){

();

}

//显示请求结果

}

publicDatagramPacketgetReceivePacket(){

returnreceivePacket;

}

publicvoidsetReceivePacket(DatagramPacketreceivePacket){

=receivePacket;

}

publicDatagramSocketgetServerSocket(){

returnserverSocket;

}

publicvoidsetServerSocket(DatagramSocketserverSocket){

=serverSocket;

}

}

客户端代码

import*客户端

*@authorLinBingcheng

*/

publicclassPingClient{

publicstaticvoidmain(String[]args)throwsException{

//Scannerscanner=newScanner;//接收从系统指定输入方式输入的数据(默认为键盘)

Stringhost=args[0];//();//获取服务器端所在的主机地址

intport=(args[1]);//();//获取服务器端监听的端口号

Long[]rtt=newLong[10];//用于存储rtt,用于最后的统计

for(inti=1;i<=10;i++){//模拟发送10条请求

SimpleDateFormatsdf=newSimpleDateFormat(

"yyyy-MM-ddhh:

mm:

");//时间戳格式

DatesendBefore=newDate();//记录发送前时间

Stringsentence="head:

request"+i

+"\n"//模拟用的请求数据

+"playload:

PingUDPSequenceNumber:

"+i+"TimeStamp:

"

+(sendBefore)+"\n";

DatagramSocketclientSocket=newDatagramSocket();//生成客户端DatagramSocket实例

InetAddressIPAddress=(host);//生成ip地址实例

byte[]buffer=newbyte[1024];//数据包使用的缓冲区

buffer=();//将请求数据放进缓冲区内

DatagramPacketsendPacket=newDatagramPacket(buffer,

IPAddress,port);//生成发送数据包实例

(sendPacket);//发送到服务器端

DatagramPacketreceivePacket=newDatagramPacket(buffer,;//生成接收数据包实例

try{//接收从服务端返回的数据包

(receivePacket);

}catch(IOExceptione){

"分组接受异常");

();

}

StringreceiveSentence=newString());//将数据从缓冲区轮换成字符串

DatereceiveAfter=newDate();//记录接收后的时间

rtt[i-1]=()-();//计算rtt

if(rtt[i-1]>1000){//如果接收时间大约1000ms,视为数据包丢失

rtt[i-1]=(long)1000;

receiveSentence="datalose\n";

}

//显示从server返回的数据端

"rtt:

"+rtt[i-1]);//显示rtt

();//关闭socket

}

//统计出平均rtt,最大rtt和最小rtt

longsumRtt=0;

longmaxRtt=0;

longminRtt=rtt[0];

for(inti=0;i<10;i++){

if(rtt[i]>maxRtt){

maxRtt=rtt[i];

}

if(rtt[i]

minRtt=rtt[i];

}

sumRtt+=rtt[i];

}

"averagertt:

"+sumRtt/10+"millisecond");

"maxrtt:

"+maxRtt);

"minrtt:

"+minRtt);

}

}

七、测试用例

按“win+R”键,在弹出的对话框中输入“cmd”回车,如下:

通过“cd”命令,进入源程序所在目录

输入“javac”命令,编译程序

输入“javac”命令,编译程序

在相同目录下生成两个可执行文件(没有报错说明编译成功)

测试程序

将class文件复制到简单易读取的位置

此时需要启动PingServer和启动PingClient,打开两个命令行,通过“cd”进入到文件存放目录

输入测试执行命令:

javaPingServer9999(9999是端口号可以是任意的)

javaPingClientlocalhost9999(localhost代表本机,即命令进行启动,并发送10个请求,请求信息payload包括了PingUDP、SequenceNumber、TimeStamp的内容,以及每个请求的折返时间,并统计10个请求的平均RTT以及最大RTT和最小RTT,此时PingClient客户端收到PingServer服务器的返回信息显示如下:

PingServer输出结果如下

PingClient输出结果如下

对于分组的丢失体现在如果生成的rtt超过1000ms就当做是是丢失了(在1秒之内),结果如下:

其中rtt是指发送数据的时间减去接收数据的时间,也即产生的时延。

 

八、总结

虽然说课程设计在很早之前题目就发了,但由于大一的时候加入了一个工作室,这一年一直被工作室的老师叫去做他那边的项目,所以没去看,等到真正布置时已经是期末考试了,考完试就剩下一个多星期做,原本打算做P2P聊天室的,复习了几天以前学过的swing开发和网络编程,界面也做着,设计什么的做了一些,但也对于这方面的知识也没怎么掌握,做起来十分吃力,同时工作室的老师又因为他那边之前的接的一个项目的原因考完试就催着我赶他那边的项目,所以又花了几天码他那边的代码,本来就不多的时间不够开放一个完美的P2P聊天软件,到接近交作业前几天觉得做个精简版也不大可能,毕竟这样要重新搭框架,设计。

所以我选择了这个比较简单的题目。

虽然学过java网络编程要做到这个题目还是可以的,但也由于时间也不够分析这个题目。

所以有参考网上的往届师兄师姐的作业的,这点我要承认,参考了一些业务逻辑,最后在有限的时间里我也尽我的能力写好这份代码,实现了课程设计要求的模拟的功能。

在这个学期我遭遇了很多事情,尤其是期末的这段时间还任然伴随着工作室项目的压力让我感触良多,由于没有什么机会复习,每堂考试感觉基本都要挂,由于大多是专业课凭借自己的一点点了解勉强扛过去了,但考完试没休息依旧还在赶项目,作业课设都没什么机会估计,情绪也很低落,感觉压力十分的大,这样的不顾学业也不知道为了什么,迷茫了好久,不知如何是好,心中也在想我到底是要以学业为重,还是为了那些所谓的人情世故而做着自己不想做的无意义的东西,我只希望大学接下来的时间里能好好静下心来学习的,不再去做工作室的老师在外面接的那些商业项目,整天写着毫无意义的增删查改,我的时间能用来做自己想做的事,学自己想学的东西,以备大四好好找工作了。

如果老师有看文档的话,那么就附上我自己写的P2P聊天室界面,希望能加点分,怪可惜,才搭好界面没多少时间去写后台,打算把网络和数据库结合在一起的,数据库本来之前写过一个作品的,但这次打算结合网络,所以前期设计有点大,如果时间够的话应该可以完全把作业实现的,但验收网络作业的时间太早

 

九、附带半成品作业截图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1