您好,欢迎访问三七文档
1课程设计课程名称计算机网络A___题目名称编程实现基于UDP的ping(java)学生学院计算机学院专业班级__学号学生姓名_指导教师_2014年1月5日2目录课程设计任务书.............................................3一、设计环境...............................................4二、课程设计的目的..........................................4三、理论基础...............................................4四、基本要求...............................................5五、设计思想...............................................5六、源程序.................................................6七、测试情况...............................................8八、改进的编程基于UDP的Ping..............................17九、总结..................................................233计算机网络课程设计任务书设计题目编程实现基于UDP的PING(Java)已知技术参数和设计要求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小时4一、设计环境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的输入输出线路、电缆和路由器等存在的故障,从而减少了问题的范围。5四、基本要求4.1服务器端PingServer功能:2.1可以并发地为多个用户服务;2.2显示用户通过客户端发送来的消息内容(包含头部和payload);2.3能够模拟分组的丢失;能够模拟分组传输延迟;2.4将用户发送来的请求request在延迟一段随机选择的时间(小于1s)后返回给客户端,作为收到请求的响应reply;2.5通过如下命令行启动服务器:javaPingServerport。port为PingServer的工作端口号4.2客户端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的工作端口号五、设计思想UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据包,在OSI模型中,在第四层----传输层,处于IP协议的上一层,UDP有不提供数据报分组、组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知是否安全完整的到达目的地。这个课设通过调用javaJDK中java.net包下的DatagramSocket和DatagramPacket类,可以实现对用户数据报文的控制,DatagramSocket类用于创建接收和发送UDP的Spcket实例,调用DatagramPacket类用于处理报文,因为它可以将Byte数组、目标地址、目标端口等数据包装成报文或者将报文拆卸成Byte数组。通过调用DatagramSocket和DatagramPacket类来实现操作系统提供的ping命令的类似功能。编程实现基于UDP的ping的思想可以概括为几点:5.1服务器端PingServer功能:1、可以并发地为多个用户服务;2、显示用户通过客户端发送来的消息内容(包含头部和payload);3、将用户发送来的请求在延迟一段时间后返回给客户端,作为收到请求的相应。4、通过javaPingServer6789(端口号可以任意选择)命令行来启动服务器。65.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;importjava.net.DatagramPacket;//DatagramPacket类importjava.net.DatagramSocket;//DatagramSocket类用于创建接受和发送UDP的Socket实例importjava.net.InetAddress;publicclassPingServer{publicstaticvoidmain(String[]args)throwsException{System.out.println(PingServerStarted);intinitPort=newInteger(args[0]);7DatagramSocketserverSocket=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.BufferedReader;importjava.io.InputStreamReader;importjava.io.StringReader;importjava.net.DatagramPac
本文标题:计算机网络课设
链接地址:https://www.777doc.com/doc-3358318 .html