《计算机网络》课程设计
编程实现基于 UDP 的 PING(Java)
学生学院
计算机学院
网络工程
专业班级
学
号
学生姓名
指导教师
2015 年 1 月 13 日
1
2
计算机网络课程设计任务书
设计题目 编程实现基于 UDP 的 PING (Java)
已知技术参
数和设计要
求
1.编程实现 PING 的服务器端和客户端,实现操作系统提供的 ping 命令的类
似功能。
2.服务器端 PingServer 功能:
2.1 可以并发地为多个用户服务;
2.2 显示用户通过客户端发送来的消息内容(包含头部和 payload);
2.3 能够模拟分组的丢失;能够模拟分组传输延迟;
2.4 将用户发送来的请求 request 在延迟一段随机选择的时间(小于 1s)后返
回给客户端,作为收到请求的响应 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
其中: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.ping 命令工作机制学习
2.Java UDP Socket 通信机制
3.Java 多线程程序设计
4.PingServer 程序设计
5.PingClient 程序设计
6.调试与演示
6.课程设计说明书
3
2 小时
2 小时
4 小时
6 小时
12 小时
4 小时
10 小时
一、设计环境
java JDK 1.8
Eclipse
运行环境:dos 运行
二、课程设计的目的
本次设计的目的就是在掌握计算机网络理论的基础上,了解网络技术,掌
握网络相关设计方法和思想,通过本次课程设计,达到巩固和综合应用计算机网
络原理的知识,本次课程设计主要是基于 UDP 的 ping,使用 java 语言编程,编
写一个实验程序,用 java 语言编程运行、仿真,通过观察实验结果,从而判定
本次程序设计是否成功完成任务。一人一题有利于锻炼我们的独立思考以及解决
问题的能力。
三、理论基础
UDP 协议的全称是用户数据报,在网络中它与 TCP 协议一样用于处理数据包,
在 OSI 模型中,在第四层----传输层,处于 IP 协议的上一层,UDP 有不提供数
据报分组、组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是
无法得知是否安全完整的到达目的地。
这 个 课 设 通 过 调 用 java JDK 中 java.net 包 下 的 DatagramSocket 和
DatagramPacket 类,可以实现对用户数据报文的控制,DatagramSocket 类用于
创建接收和发送 UDP 的 Spcket 实例,调用 DatagramPacket 类用于处理报文,因
为它可以将 Byte 数组、目标地址、目标端口等数据包装成报文或者将报文拆卸
成 Byte 数组。
通过调用 DatagramSocket 和 DatagramPacket 类来实现操作系统提供的 ping
命令的类似功能。
设计要点:
本次课设设计的要点是实现接受发送 UDP 数据报,模仿 PING 功能的实现。
其中,教重要的是模仿数据丢失的情况,程序采用生成随机数作为网络延迟
的时间(long randomTime = (long) (Math.random()*1500););
若延迟时间超过 1000ms,即认为该数据报丢失。向客户端发送数据丢失的
信息。
4
四、程序运行流程图
PingServer
打开 PingServer 服务端
指定端口
监听指定端口
根据生成的随机
数判断是否超时
N
将原数据报返回
客户端
Y
Y
是否收到数据
N
告知客户端数据丢失
PingClient
打开 PingClient 客户端
指定 IP 和端口号
根据指定 IP 和端口
发送 10 个数据包
计算最小 RTT
最大 RTT
平均 RTT
逐个显示接收到的
回复
五、运行测试
在“开始”——“运行”弹出的对话框重输入“cmd”回车,如下:
5
输入:javac PingServer.java
Javac PingClient.java
编译 Java 类
接着编译成功以后再输入执行命令:java PingServer 8888(8888 是端口号可
以是任意的)得出结果如下:
此时需要再启动 PingClient,在“开始”——“运行”弹出的对话框重输入
“cmd”回车,然后在弹出框中输入“cd \”,回车以后输入“java PingClient localhost
6789 ”(localhost 就是本机的 IP 地址)命令进行启动,并发送 10 个请求,请
求信息 payload 包括了 PingUDP、 SequenceNumber 、TimeStamp 的内容,以及
每个请求的折返时间,并统计 10 个请求的平均 RTT 以及最大 RTT 和最小 RTT,
此时 PingClient 客户端收到 PingServer 服务器的返回信息显示如下:
6
7
此时 PingServer 服务器端显示用户端发送来的消息内容(包括头部 Head 和
payload),并将用户发送来的请求在延迟一段时间以后做出返回给客户端,作为
收到请求的响应,结果如下:
8