计算机网络课设Word格式文档下载.docx
- 文档编号:17390527
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:26
- 大小:205.72KB
计算机网络课设Word格式文档下载.docx
《计算机网络课设Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《计算机网络课设Word格式文档下载.docx(26页珍藏版)》请在冰豆网上搜索。
已知技术参数和设计要求
1.编程实现PING的服务器端和客户端,实现操作系统提供的ping命令的类似功能。
2.服务器端PingServer功能:
2.1可以并发地为多个用户服务;
2.2显示用户通过客户端发送来的消息内容(包含头部和payload);
2.3能够模拟分组的丢失;
能够模拟分组传输延迟;
2.4将用户发送来的请求request在延迟一段随机选择的时间(小于1s)后返回给客户端,作为收到请求的响应reply;
2.5通过如下命令行启动服务器:
javaPingServerport。
port为PingServer的工作端口号
3.客户端PingClient功能:
3.1启动后发送10个request。
发送一个request后,最多等待1秒以便接收PingServer返回的reply消息。
如果在该时间内没有收到服务器的reply,则认为该请求或对该请求的reply已经丢失;
在收到reply后立即发送下一个request。
3.2请求消息的payload中至少包含关键字PingUDP、序号、时间戳等内容。
如:
PingUDPSequenceNumberTimeStampCRLF
其中:
CRLF表示回车换行符(0X0D0A);
TimeStamp为发送该消息的机器时间。
3.3为每个请求计算折返时间(RTT),统计10个请求的平均RTT、最大/小RTT。
3.4通过如下命令行启动:
javaPingClienthostport。
host为PingServer所在的主机地址;
port为PingServer的工作端口号
设计内容与步骤
1.学习ICMP,了解ping命令的工作机理;
2.学习JavaUDPSocket通信机制;
3.了解Java多线程程序设计;
4.服务器PingServer程序设计;
5.客户端PingClient程序设计。
6.调试与演示
设计工作计划与进度安排
1.ping命令工作机制学习2小时
2.JavaUDPSocket通信机制2小时
3.Java多线程程序设计4小时
4.PingServer程序设计6小时
5.PingClient程序设计12小时
6.调试与演示4小时
6.课程设计说明书10小时
一、设计环境
javaJDK1.7
二、课程设计的目的
本次设计的目的就是在掌握计算机网络理论的基础上,了解网络技术,掌握网络相关设计方法和思想,通过本次课程设计,达到巩固和综合应用计算机网络原理的知识,本次课程设计主要是基于UDP的ping,使用java语言编程,编写一个实验程序,用java语言编程运行、仿真,通过观察实验结果,从而判定本次程序设计是否成功完成任务。
一人一题有利于锻炼我们的独立思考以及解决问题的能力。
三、理论基础
3.1UDP的相关介绍
UDP就是用户数据报协议,是与TCP相对应的协议,都是用来处理数据包的,它是面向无连接的协议,它不与对方建立连接,而是直接就把数据包发送过去,UDP使用于一次只传送少量数据、对可靠性要求不高的应用环境,UDP有不提供数据报分组、组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达目的地的。
在选择使用协议的时候,选择UDP必须要慎重,在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重,但是由于UDP的特性,它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP比较多,因为它们即使偶尔丢失了一两个数据包,也不会对接收结果产生太大影响,比如我们聊天用的ICQ和OICQ就是使用UDP协议。
3.2ping的相关介绍
Ping是Windows系列自带的一个可执行命令,利用它可以检查网络是否能够连通,用好它可以很好地帮助我们分析判定网络故障,应用格式:
pingIP地址,该命令还可以加许多参数使用,Ping是DOS命令,一般用于检测网络通与不通,也叫时延,其值越大,速度越慢。
Ping指的是端对端连通,通常用来作为可用性检查,但是某些病毒木马会强行大量远程执行ping命令来抢占你的网络资源,导致系统变慢,网速变慢,严禁ping入侵作为大多数防火墙的一个基本功能提供给用户进行选择,通常情况下你如果不用做服务器或者进行网络测试,可以放心的选中它,保护你的电脑。
简单来说,Ping就是一个测试程序,如果ping运行正确,你大体上就可以排除网络访问层、网卡、MODEM的输入输出线路、电缆和路由器等存在的故障,从而减少了问题的范围。
四、基本要求
4.1服务器端PingServer功能:
4.2客户端PingClient功能:
五、设计思想
UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据包,在OSI模型中,在第四层----传输层,处于IP协议的上一层,UDP有不提供数据报分组、组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知是否安全完整的到达目的地。
这个课设通过调用javaJDK中包下的DatagramSocket和DatagramPacket类,可以实现对用户数据报文的控制,DatagramSocket类用于创建接收和发送UDP的Spcket实例,调用DatagramPacket类用于处理报文,因为它可以将Byte数组、目标地址、目标端口等数据包装成报文或者将报文拆卸成Byte数组。
通过调用DatagramSocket和DatagramPacket类来实现操作系统提供的ping命令的类似功能。
编程实现基于UDP的ping的思想可以概括为几点:
5.1服务器端PingServer功能:
1、可以并发地为多个用户服务;
2、显示用户通过客户端发送来的消息内容(包含头部和payload);
3、将用户发送来的请求在延迟一段时间后返回给客户端,作为收到请求的相应。
4、通过javaPingServer6789(端口号可以任意选择)命令行来启动服务器。
5.2客户端PingClient功能:
1、启动都发送10个请求,发送一个请求后,最多等待1秒以便接收PingServer返回的响应消息。
2、请求消息的payload中包含有关键字PingUDP、序号、时间戳等内容。
3、为每个请求计算折返时间(RTT),统计10个请求的平均RTT、min/max的RTT。
4、通过javaPingClientlocalhost(本机IP地址)6789命令行启动。
5.3程序设计流程图
根据课程设计的要求,结合程序设计流程,本次设计按如下的流程进行
六、源程序
PingServer服务器端的实现:
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
import.DatagramPacket;
//DatagramPacket类
import.DatagramSocket;
//DatagramSocket类用于创建接受和发送UDP的Socket实例
import.InetAddress;
publicclassPingServer
{
publicstaticvoidmain(String[]args)throwsException
{
System.out.println("
PingServerStarted"
);
intinitPort=newInteger(args[0]);
DatagramSocketserverSocket=newDatagramSocket(initPort);
byte[]receiveData=newbyte[1024];
byte[]sendData=newbyte[1024];
while(true)
{
DatagramPacketreceivePacket=newDatagramPacket(receiveData,receiveData.length);
serverSocket.receive(receivePacket);
Stringsentence=newString(receivePacket.getData());
System.out.println(sentence);
Thread.sleep(500);
InetAddressIPAddress=receivePacket.getAddress();
intport=receivePacket.getPort();
StringcapitalizedSentence=sentence.toUpperCase();
sendData=capitalizedSentence.getBytes();
DatagramPacketsendPacket=newDatagramPacket(sendData,sendData.length,IPAddress,port);
serverSocket.send(sendPacket);
}
}
}
PingClient客户端的实现:
importjava.io.StringReader;
//使用JDK中包下的DatagramSocket、DatagramSocket类,可以
//比较方便的控制用户数据报文
importjava.text.SimpleDateFormat;
importjava.util.Date;
publicclassPingClient
Stringaddress=args[0];
intport=newInteger(args[1]);
Long[]rtt=newLong[10];
for(inti=1;
i<
=10;
i++){
SimpleDateFormatsdf=newSimpleDateFormat("
yyyy-MM-ddhh:
mm:
ss.SS"
Stringsentence="
head:
request"
+i+"
\n"
+
"
playload:
PingUDPSequenceNumber:
"
TimeStamp:
+sdf.format(newDate())+"
\n"
;
DatagramSocketclientSocket=newDatagramSocket();
//创建实例,没有特定监听的端口,是一个临时的
InetAddressIPAddress=InetAddress.getByName(address);
//getByName(address)返回一个封装Host地址的实例
//Host可以是域名或是合法的IP地址,这里是本机IP地址
sendData=sentence.getBytes();
DatagramPacketsendPacket=newDatagramPacket(sendData,sendData.length,IPAddress,port);
DatesendBefore=newDate();
clientSocket.send(sendPacket);
Thread.sleep(500);
DatagramPacketreceivePacket=newDatagramPacket(receiveData,receiveData.length);
clientSocket.receive(receivePacket);
DatereceiveAfter=newDate();
StringmodifiedSentence=newString(receivePacket.getData());
rtt[i-1]=receiveAfter.getTime()-sendBefore.getTime();
System.out.println("
rtt:
+rtt[i-1]);
System.out.println(modifiedSentence);
clientSocket.close();
longsumRtt=0;
longmaxRtt=0;
longminRtt=rtt[0];
for(inti=0;
10;
i++)//求最大RTT和最小RTT的函数
if(rtt[i]>
maxRtt){
maxRtt=rtt[i];
}
if(rtt[i]<
minRtt){
minRtt=rtt[i];
sumRtt+=rtt[i];
averagertt:
"
+sumRtt/10+"
millisecond"
maxrtt:
+maxRtt+"
minrtt:
+minRtt+"
七、测试情况
在“开始”——“运行”弹出的对话框重输入“cmd”回车,如下:
然后在弹出框中输入“cd\”,返回当前目录的根目录,得到如下:
输入:
javacPingServer.java
JavacPingClient.java两句命令行进行编译,在C盘生成两个以class为后缀的文件(最终执行文件)
接着编译成功以后再输入执行命令:
javaPingServer6789(6789是端口号可以是任意的)得出结果如下:
此时需要再启动PingClient,在“开始”——“运行”弹出的对话框重输入“cmd”回车,然后在弹出框中输入“cd\”,回车以后输入“javaPingClientlocalhost6789”(localhost就是本机的IP地址)命令进行启动,并发送10个请求,请求信息payload包括了PingUDP、SequenceNumber、TimeStamp的内容,以及每个请求的折返时间,并统计10个请求的平均RTT以及最大RTT和最小RTT,此时PingClient客户端收到PingServer服务器的返回信息显示如下:
此时PingServer服务器端显示用户端发送来的消息内容(包括头部Head和payload),并将用户发送来的请求在延迟一段时间以后做出返回给客户端,作为收到请求的响应,结果如下:
八、改进的基于UDP的ping编程
增加了模拟数据丢失的情况,上面的情况是在没有数据丢失的情况下运行的,也就是在理想的情况下运行的结果,但是真正网络在传输数据的时候是会有数据丢失的,不可能完全无数据丢失的。
改进的代码如下:
PingServer服务器的代码改进如下:
/**
*PingServer
*/
//从命令行获得port
//根据port,生成server端socket实例
//用于接收数据的byte数组
//用于发送数据的byte数组
//死循环,不断的监听是否有请求数据
DatagramPacketreceivePacket=newDatagramPacket(receiveData,receiveData.length);
//生成接收数据报包实例
//接收到数据
//将数据从byte数组轮换回String
//获得client端的ip
//获得client端的port
longrandomTime=(long)(Math.random()*1000);
//生成随机数,用于模拟传输延迟
Thread.sleep(randomTime);
//程度睡眠,用于模拟传输延迟
if(randomTime>
500)//如果随机数大于500,模拟数据循丢失
{
sentence="
DataLoss\n"
//数据丢失的信息
//显示请求数据
sendData=sentence.getBytes();
//请求数据转换成byte数组,用于发回client端
DatagramPacketsendPacket=newDatagramPacket(sendData,sendData.length,IPAddress,port);
//生成数据包
//发回client端
PingClien客户端的代码改进如下:
//从命令行获得serverip地址
//从命令行获得serverport
//用于存储rtt,用于最后的统计
for(inti=1;
=10;
i++)//模拟发送10条请求
m
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络
![提示](https://static.bdocx.com/images/bang_tan.gif)