




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机网络课程设计课程名称 计算机网络课程设计 学 院 计算机学院 专业班级 学 号 学生姓名 指导教师 梁路 年 月 日计算机网络课程设计任务书设计题目编程实现基于UDP的PING (Java)已知技术参数和设计要求1.编程实现PING的服务器端和客户端,实现操作系统提供的ping命令的类似功能。2.服务器端PingServer功能:2.1 可以并发地为多个用户服务;2.2 显示用户通过客户端发送来的消息内容(包含头部和payload);2.3 能够模拟分组的丢失;能够模拟分组传输延迟;2.4 将用户发送来的请求request在延迟一段随机选择的时间(小于1s)后返回给客户端,作为收到请求的
2、响应reply; 2.5 通过如下命令行启动服务器:java PingServer port。 port为PingServer的工作端口号3.客户端PingClient功能:3.1启动后发送10个request。发送一个request后,最多等待1秒以便接收PingServer返回的reply消息。如果在该时间内没有收到服务器的reply,则认为该请求或对该请求的reply已经丢失;在收到reply后立即发送下一个request。3.2请求消息的payload中至少包含关键字PingUDP、序号、时间戳等内容。如:PingUDP SequenceNumber TimeStamp CRLF 其中
3、:CRLF表示回车换行符(0X0D0A);TimeStamp为发送该消息的机器时间。3.3 为每个请求计算折返时间(RTT),统计10个请求的平均RTT、最大/小RTT。3.4 通过如下命令行启动:java PingClient host port。 host为PingServer所在的主机地址;port为PingServer的工作端口号设计内容与步骤1.学习ICMP,了解ping命令的工作机理;2.学习Java UDP Socket通信机制;3.了解Java多线程程序设计;4.服务器PingServer程序设计;5.客户端PingClient程序设计。6.调试与演示设计工作计划与进度安排1.
4、ping命令工作机制学习 2小时2.Java UDP Socket通信机制 2小时3.Java多线程程序设计 4小时4.PingServer程序设计 6小时5.PingClient程序设计 12小时6.调试与演示 4小时6.课程设计说明书 10小时目录:1. 基础知识:11.1. ICMP11.2. Ping11.3. UDP11.4. 多线程:22. 设计思路:22.1. 线程设计:32.2. 服务器设计:32.3. 客户端设计:33. 程序流程图:33.1. Java线程程序流程图:43.2. PingServer程序流程图:43.3. PingClient程序流程图:54. 代码:64.
5、1. 线程代码:64.2. 服务器端代码:84.3. 客户端代码:105. 编译过程与截图156. 课程设计小结171. 基础知识:1.1. ICMPICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络安全具有极其重要的意义。1.
6、2. PingPING是DOS命令,一般用于检测网络通与不通,也叫时延,其值越大,速度越慢PING(PacketInternetGrope),因特网包探索器,用于测试网络连接量的程序。Ping发送一个ICMP回声请求消息给目的地并报告是否收到所希望的ICMP回声应答。它是用来检查网络是否通畅或者网络连接速度的命令。作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方就要返回一个同样大小的数据包,根据返回的数据包我们可以确定目标主机的存在,可以初步判断目标主机的操作系
7、统等。Ping是Windows系列自带的一个可执行命令。利用它可以检查网络是否能够连通,用好它可以很好地帮助我们分析判定网络故障。应用格式:PingIP地址。该命令还可以加许多参数使用,具体是键入Ping按回车即可看到详细说明。ping指的是端对端连通,通常用来作为可用性的检查。1.3. UDPUDP是User Datagram Protocol的简称,中文全称是用户数据包协议,是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。在网络中它与TCP协议一样用于处理数据包。在OSI模型中,UDP协议在第四层传输层,处于IP协议的上一层。与TCP相比,UDP有不提供数据报分组、组装和不
8、能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。(1) UDP是一个无连接协议(2) 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。(3) UDP信息包的标题很短,只有8个字节(4) 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。(5) UDP使用尽最大努力交付,即不保证可靠交付(6) UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合
9、并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小1.4. 多线程:Java中创建线程有两种方法:使用Thread类和使用Runnable接口。在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例。Java中关于线程调度的API最主要的有下面几个:线程睡眠:Thread.sleep(long millis)方法线程等待:Object类中的wait()方法线程让步:Thread.yield() 方法线程加入:join()方法线程唤醒:Object类中的notify()方法2
10、. 设计思路:2.1. 线程设计:(1) 获取从服务其传送到的请求报文的数据,将原报文内的数据封装进一个新的DatagramPacket中。(2) 选取处于0-1500之间的随机数,作为睡眠时间。(3) 睡眠时间结束后,开始向获取到的客户端的地址和端口发送封装好的DatagramPacket2.2. 服务器设计:(1) 定义一个UDP的DatagramSocket传送数据,记录服务器启动的时间(2) 进入死循环,不断监听是否有客户端传送来的请求报文,若有,转(3)(3) 计算当前时间与服务器启动时间的差值,若差值处于5秒到5.5秒之间,返回(2)(模拟分组丢失);否则启动新线程2.3. 客户端
11、设计:(1) 定义一个UDP的DatagramSocket传送数据。(2) 将关键字PingUDP,序号和时间戳封装到DatagramPacket中作为报文的内容。(3) 向服务器的制定端口发送封装好的报文信息(4) 设置超时计时器(5) 超过超时计时器的时间未收到服务器发来的响应报文,则返回(2);否则,转(5)(6) 判断接收到的报文是否与当前发送的报文相对应,若是,返回(2);否则,返回(5)。3. 程序流程图:3.1. Java线程程序流程图:3.2. PingServer程序流程图:3.3. PingClient程序流程图:4. 代码:4.1. 线程代码:/* * */import
12、.DatagramPacket;import .DatagramSocket;ion;import .InetAddress;/* * 线程 * author LingHuacai * */public class ThreadServer extends Threadprivate DatagramSocket socket;private DatagramPacket packet;public ThreadServer(DatagramSocket socket, DatagramPacket packet)/初始化socket和packetthis.socket = socket;th
13、is.packet = packet;public void run()/定义延迟回送报文的随机时间long randomTime = (long)(Math.random()*1500);String data = new String(packet.getData();byte buffer = data.getBytes();System.out.println(收到报文+data);/获取客户端地址InetAddress host = packet.getAddress();/获取客户端应用进程端口号int port = packet.getPort();/回送给客户端的报文Datag
14、ramPacket send = new DatagramPacket(buffer, buffer.length, host, port);trysleep(randomTime);catch(InterruptedException e)e.printStackTrace();try/回送报文socket.send(send);catch(IOException ee)System.out.println(服务器发送回复报文失败!);ee.printStackTrace();4.2. 服务器端代码:/* * */package udp;import .DatagramPacket;impo
15、rt .DatagramSocket;import java.io.IOException;import java .net.SocketException;/* * 服务器端 * author LingHuacai * */public class PingServer extends Thread/监听的端口号private int initPort;private byte buf = new byte32;private DatagramPacket packet;private DatagramSocket socket;public PingServer(int initPort)
16、this.initPort = initPort;public void run()try/初始化socket,定义socket的端口号socket = new DatagramSocket(initPort);System.out.println(Server started);catch(SocketException e)System.out.println(监听端口+initPort+失败);e.printStackTrace();/初始化端口号失败,终止程序System.exit(0);/记录当前时间long startTime = System.currentTimeMillis(
17、);/死循环,不断监听是否有报文请求while(true)try packet = new DatagramPacket(buf,buf.length);/获取客户端发来的报文socket.receive(packet);catch(IOException e)e.printStackTrace();/输出分组和服务器启动时间的差值System.out.println(接收到这个分组的的时间与服务器启动时间差:+(System.currentTimeMillis()-startTime)+毫秒!);if(5000(System.currentTimeMillis()-startTime) |(
18、System.currentTimeMillis()-startTime)5500)ThreadServer server = new ThreadServer(socket, packet);/启动线程server.start();else System.out.println(报文丢失!); public void destroy()socket.close();public static void main(String args)/初始化服务器PingServer ping = new PingServer(Integer.valueOf(args0);ping.start();4.3
19、. 客户端代码:import .DatagramPacket;import .DatagramSocket;import .UnknownHostException;import java.io.IOException;import .InetAddress;import .SocketException;import java.util.Date;import java.text.SimpleDateFormat;/* * 客户端 * author LingHuacai * */public class PingClient extends Thread private DatagramSo
20、cket client;private InetAddress hostAddress;int port;/定义并初始化接收到的响应报文的个数int j = 0;/定义并初始化最小往返时间,最大往返时间,平均往返时间long minRtt=0, maxRtt=0, avrRtt=0, sumRtt=0;long rtt = new long10;public PingClient(String host,int port)this.port = port;try client = new DatagramSocket();/获取客户端地址hostAddress = InetAddress.ge
21、tByName(host); catch (UnknownHostException e) / TODO Auto-generated catch blocke.printStackTrace();catch(SocketException ee)ee.printStackTrace();public void run()/定义时间戳格式SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-ddhh:mm:ss.SS);for(int i=0; i10; i+)rtti = 0;for(int i = 0;i10;i+)/发送报文中的时间Dat
22、e sendTime = new Date();String outMessage = new String(PingUDP:+i+,+sdf.format(sendTime);String recieve = null;byte buffer = outMessage.getBytes();byte buf = new bytebuffer.length;DatagramPacket sendPacket = new DatagramPacket(buffer, buffer.length, hostAddress, port);DatagramPacket recievePacket =
23、new DatagramPacket(buf, buf.length);try client.send(sendPacket);/设置超时时间为1秒client.setSoTimeout(1000);/接收响应报文client.receive(recievePacket);recieve = new String(recievePacket.getData();/判断是否为延时报文,若为延时报文则丢弃,继续接收报文while(!recieve.equals(outMessage)recieve = null;client.receive(recievePacket);recieve = new
24、 String(recievePacket.getData();/记录接收后时间Date recieveTime = new Date();/计算往返时间rtti = recieveTime.getTime()-sendTime.getTime(); catch (IOException e) / TODO Auto-generated catch blockSystem.out.println(响应报文丢失或超时!+n);e.printStackTrace();if(recieve!=null)System.out.println(recieve);System.out.println(rt
25、t:+rtti);if(rtt0!=0)minRtt = rtt0;maxRtt = rtt0;sumRtt = rtt0;j+;else minRtt = 2000;for(int i=1; irtti)minRtt = rtti;/最大往返时间if(maxRttrtti)maxRtt = rtti;/总往返时间sumRtt = sumRtt + rtti;if(j!=0)/计算平均往返时间avrRtt = sumRtt/j;System.out.println(共发送10个请求,成功接收+j+回复报文);System.out.println(最小往返时间为:+minRtt);System.out.println(最大往返时间为:+maxRtt);System.out.println(平均往返时间为:+avrRtt);elseSystem.out.println(发送请求失败!无回送报文);/关闭线程client.close();public static void main(String args)PingClient clientThread = new PingClient(args0, Integer.valueOf(args1);clientThread.start();5. 编译过程与截图将PingServer.java文件和PingClient.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 动脉留置针护理规范与流程
- 转本录取就业协议书
- 项目开发责任协议书
- 转让牛蛙场地协议书
- 顶名购房资格协议书
- 造价咨询挂靠协议书
- 车位使用租赁协议书
- 护理人才竞聘演讲
- 驾照内部保密协议书
- 钢板废料出售协议书
- 固定资产和无形资产培训课程课件
- 合欢树史铁生课件
- 机房工程系统调试检验批质量验收记录表
- 光伏项目试验报告
- DB37-T 3587-2019养老机构护理型床位认定
- 汽车电子可靠性测试项目-(全)-16750-1-to-5
- 丁苯橡胶乳液聚合的生产工艺
- JOINT VENTURE AGREEMENT合资企业协议(双语版)
- CJ343-2010 污水排入城镇下水道水质标准
- 2022秋期版2208国开电大专科《政治学原理》网上形考(任务1至4)试题及答案
- 内科、外科护理考核试题及答案
评论
0/150
提交评论