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

《计算机网络》课程设计学院 ____计算机学院 _______ 专业 ______软件工程 _______年级班别 ______12 级 4 班 _______ 学号91学生姓名指导教师__________林炳城梁路_ __ ___________成绩目录设计题目已知技术参数和设计要求设计内容与步骤设计工作计划与进度安排计算机网络课程设计任务书编程实现基于UDP 的 PING (Java)1.编程实现 PING 的服务器端和客户端,实现操作系统提供的 ping 命令的类似功能。

2.服务器端PingServer 功能:可以显示用户通过客户端发送来的消息内容(包含头部和payload);能够模拟分组的丢失;能够模拟分组传输延迟;将用户发送来的请求request 在延迟一段随机选择的时间(小于 1s)后返回给客户端,作为收到请求的响应reply;通过如下命令行启动服务器:java PingServer port 。

port 为 PingServer 的工作端口号3.客户端 PingClient功能:启动后发送10 个 request。

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

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

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

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

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

通过如下命令行启动:java PingClient host port 。

host 为 PingServer 所在的主机地址;port 为 PingServer 的工作端口号1.学习 ICMP ,了解 ping 命令的工作机理;2.学习 Java UDP Socket 通信机制;3.了解 Java 多线程程序设计;4.服务器 PingServer 程序设计;5.客户端 PingClient 程序设计。

6.调试与演示命令工作机制学习 2 小时UDP Socket 通信机制 2 小时多线程程序设计 4 小时程序设计 6 小时程序设计12 小时6.调试与演示 4 小时6.课程设计说明书10 小时一、设计环境操作系统: win8开发环境:IDE : eclipse二、课程设计的目的本次课程设计的目的在掌握计算机网络理论的基础上,了解网络技术,掌握计算机网络相关设计方法和思想,希望能通过本次的课程设计,达到巩固和综合应用计算机网络原理和知识,本次课程设计主要是编程实现基于 UDP 的 ping,使用 java 语言编程,编写一个实验程序、仿真模拟 Ping 命令,通过观察实验结果,从而判定本次程序设计是否成功完成任务。

三、理论基础UDP 简介UDP 是 User Datagram Protocol 的简称,中文名是用户数据包协议,是OSI(Open System Interconnection ,开放式系统互联)参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768 是 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 (Packet Internet Groper) ,因特网包探索器,用于测试网络连接量的程序。

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

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

作为一个生活在网络上的管理员或者黑客来说,ping 命令是第一个必须掌握的DOS 命令,它所利用的原理是这样的:利用网络上机器IP 地址的唯一性,给目标 IP 地址发送一个数据包,再要求对方返回一个同样大小的数据包来确定两台网络机器是否连接相通,时延是多少。

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

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

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

四、基本要求编程实现PING 的服务器端和客户端,实现操作系统提供的服务器端PingServer 功能:可以显示用户通过客户端发送来的消息内容(包含头部和能够模拟分组的丢失;能够模拟分组传输延迟;将用户发送来的请求request 在延迟一段随机选择的时间户端作为收到请求的响应reply ;通过如下命令行启动服务器:java PingServer port 。

ping 命令的类似功能。

payload);(小于 1s)后返回给客port 为PingServer 的工作端口号客户端 PingClient功能:启动后发送10 个 request。

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

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

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

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

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

通过如下命令行启动:java PingClient host port 。

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

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

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

编程实现基于UDP 的 ping 的思想可以概括为几点:服务器端 PingServer 功能:可以并发地为多个用户服务;显示用户通过客户端发送来的消息内容(包含头部和payload) ;将用户发送来的请求在延迟一段时间后返回给客户端,作为收到请求的相应。

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

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

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

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

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

程序设计流程图根据课程设计的要求,结合程序设计流程,本次设计按如下的流程进行开始结束Y功能分析N通过程序设计程序校验六、源程序服务器端代码import* 服务器端*@author LinBingcheng*/public class PingServer extends Thread {private int initPort; ubstring(0, 100);//将数据从缓冲区轮换成字符串}InetAddress host = (); //获取客户端的ip 地址int port = (); //获取客户端的通讯端口buffer = (); //请求数据转换成byte 数组,用于发回客户端DatagramPacket sendPacket = new DatagramPacket(buffer, ,host, port); // 生成数据包,已经保存好发送目的地的地址和端口了try {(sendPacket);// 发送数据给客户端} catch (Exception e) {();}//显示请求结果}public DatagramPacket getReceivePacket() {return receivePacket;}public void setReceivePacket(DatagramPacket receivePacket){ = receivePacket;}public DatagramSocket getServerSocket() {return serverSocket;}public void setServerSocket(DatagramSocket serverSocket){ = serverSocket;}}客户端代码import* 客户端*@author LinBingcheng*/public class PingClient {public static void main(String[] args) throws Exception {//Scanner scanner = new Scanner;// 接收从系统指定输入方式输入的数据(默认为键盘)String host = args[0]; //(); //获取服务器端所在的主机地址int port = (args[1]);//(); //获取服务器端监听的端口号Long[] rtt = new Long[10]; // 用于存储rtt ,用于最后的统计for (int i = 1; i <= 10; i++) { //模拟发送10 条请求SimpleDateFormat sdf = new SimpleDateFormat("yyyy -MM -dd hh:mm:"); //时间戳格式Date sendBefore = new Date(); //记录发送前时间String sentence = "head: request " + i+" \n" // 模拟用的请求数据+"playload: PingUDP SequenceNumber:" + i + " TimeStamp:"+(sendBefore) + "\n";clientSocket = new DatagramSocket(); //生成客户端DatagramSocketDatagramSocket 实例InetAddress IPAddress = (host); // 生成ip 地址实例byte[] buffer = new byte[1024]; // 数据包使用的缓冲区buffer = (); //将请求数据放进缓冲区内DatagramPacket sendPacket = new DatagramPacket(buffer,, IPAddress, port); //生成发送数据包实例(sendPacket); // 发送到服务器端DatagramPacket receivePacket = new DatagramPacket(buffer, ; // 生成接收数据包实例try { //接收从服务端返回的数据包(receivePacket);} catch (IOException e){ "分组接受异常 ");();}String receiveSentence = new String()); // 将数据从缓冲区轮换成字符串Date receiveAfter = new Date(); // 记录接收后的时间rtt[i -1]=() -();// 计算rttif( rtt[i - 1] > 1000){ // 如果接收时间大约1000ms,视为数据包丢失rtt[i - 1] = (long) 1000;receiveSentence = "data lose\n";}//显示从server 返回的数据端"rtt:" + rtt[i - 1]); // 显示rtt(); // 关闭socket}//统计出平均 rtt,最大 rtt 和最小 rttlong sumRtt = 0;long maxRtt = 0;long minRtt = rtt[0];for (int i = 0; i < 10; i++) {if (rtt[i] > maxRtt) {maxRtt = rtt[i];}if (rtt[i] < minRtt) {minRtt = rtt[i];}sumRtt += rtt[i];}"average rtt: " + sumRtt / 10 + " millisecond");"max rtt: " + maxRtt);"min rtt: " + minRtt);}}七、测试用例按“ win + R ”键,在弹出的对话框中输入“cmd ”回车,如下:通过“ cd”命令,进入源程序所在目录输入“ javac”命令,编译程序输入“ javac”命令,编译程序在相同目录下生成两个可执行文件(没有报错说明编译成功)测试程序将 class文件复制到简单易读取的位置此时需要启动 PingServer 和启动 PingClient ,打开两个命令行,通过“ cd”进入到文件存放目录输入测试执行命令:java PingServer 9999(9999是端口号可以是任意的)java PingClient localhost 9999 (localhost 代表本机,即命令进行启动,并发送 10 个请求,请求信息 payload 包括了 PingUDP、SequenceNumber 、TimeStamp的内容,以及每个请求的折返时间,并统计 10 个请求的平均 RTT以及最大 RTT和最小 RTT,此时PingClient 客户端收到 PingServer 服务器的返回信息显示如下:PingServer 输出结果如下PingClient输出结果如下对于分组的丢失体现在如果生成的 rtt 超过 1000ms 就当做是是丢失了(在 1 秒之内),结果如下:其中 rtt 是指发送数据的时间减去接收数据的时间,也即产生的时延。

合集下载

基于UDP网络通信系统的服务端程序设计课程设计报告

基于UDP网络通信系统的服务端程序设计课程设计报告

毕业论文声明本人郑重声明:1.此毕业论文是本人在指导教师指导下独立进行研究取得的成果。

除了特别加以标注地方外,本文不包含他人或其它机构已经发表或撰写过的研究成果。

对本文研究做出重要贡献的个人与集体均已在文中作了明确标明。

本人完全意识到本声明的法律结果由本人承担。

2.本人完全了解学校、学院有关保留、使用学位论文的规定,同意学校与学院保留并向国家有关部门或机构送交此论文的复印件和电子版,允许此文被查阅和借阅。

本人授权大学学院可以将此文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本文。

3.若在大学学院毕业论文审查小组复审中,发现本文有抄袭,一切后果均由本人承担,与毕业论文指导老师无关。

4.本人所呈交的毕业论文,是在指导老师的指导下独立进行研究所取得的成果。

论文中凡引用他人已经发布或未发表的成果、数据、观点等,均已明确注明出处。

论文中已经注明引用的内容外,不包含任何其他个人或集体已经发表或撰写过的研究成果。

对本文的研究成果做出重要贡献的个人和集体,均已在论文中已明确的方式标明。

学位论文作者(签名):年月关于毕业论文使用授权的声明本人在指导老师的指导下所完成的论文及相关的资料(包括图纸、实验记录、原始数据、实物照片、图片、录音带、设计手稿等),知识产权归属华北电力大学。

本人完全了解大学有关保存,使用毕业论文的规定。

同意学校保存或向国家有关部门或机构送交论文的纸质版或电子版,允许论文被查阅或借阅。

本人授权大学可以将本毕业论文的全部或部分内容编入有关数据库进行检索,可以采用任何复制手段保存或编汇本毕业论文。

如果发表相关成果,一定征得指导教师同意,且第一署名单位为大学。

本人毕业后使用毕业论文或与该论文直接相关的学术论文或成果时,第一署名单位仍然为大学。

本人完全了解大学关于收集、保存、使用学位论文的规定,同意如下各项内容:按照学校要求提交学位论文的印刷本和电子版本;学校有权保存学位论文的印刷本和电子版,并采用影印、缩印、扫描、数字化或其它手段保存或汇编本学位论文;学校有权提供目录检索以及提供本学位论文全文或者部分的阅览服务;学校有权按有关规定向国家有关部门或者机构送交论文的复印件和电子版,允许论文被查阅和借阅。

计算机网络-基于UDP设计模拟停等协议实验报告

计算机网络-基于UDP设计模拟停等协议实验报告
实验内容:
概述本次实验的主要内容,包含的实验项等。
1)基于UDP设计一个简单的停等协议,实现单向可靠数据传输(服
务器到客户的数据传输)。
2)模拟引入数据包的丢失,验证所设计协议的有效性。
3)改进所设计的停等协议,支持双向数据传输;
4)基于所设计的停等协议,实现一个C/S结构的文件传输应用。
5)基于UDP设计一个简单的GBN协议,实现单向可靠数据传输(服
首先进入一个循环,一次循环需要进行如下工作:
接收分组,将分组的数据缓存到datagramBuffer对应的位置(因为到达的数据可能是乱序的)
然后发送数据分组对应seq的ACK,告知发送方自己已经成功接收。之后更新滑动窗口的位置,更新的规则同发送方一样。之后进行下一次循环。
因为是乱序的,所以打包时不但要记录窗口的头位置,还要记相对偏差来标示这是哪个seq的数据(共2字节)。
务器到客户的数据传输)。
6)模拟引入数据包的丢失,验证所设计协议的有效性。
7)改进所设计的GBN协议,支持双向数据传输;
8)将所设计的GBN协议改进为SR协议。
实验过程:
GBN的原理与实现
原理:
GBN是属于传输层的协议,它负责接收应用层传来的数据,将应用层的数据报发送到目标IP和端口.
滑动窗口:假设在序号空间内,划分一个长度为N的子区间,这个区间内包含了已经被发送但未收到确认的分组的序号以及可以被立即发送的分组的序号,这个区间的长度就被称为窗口长度。(随着发送方方对ACK的接收,窗口不断的向前移动,并且窗口的大小是可变的)
GBN一个分组的发送格式是: Base(1Byte) + seq(1Byte) + data(max 1024Byte)

实验3:基于UDP的Ping客户机与服务器程序

实验3:基于UDP的Ping客户机与服务器程序

自己写一个基于UDP的Ping客户机与服务器程序这是一个《计算机网络自顶向下方法》中的编程实验。

在本实验中,你将实现一个简单的基于UDP的Ping客户机和服务器。

由这些程序提供的功能类似于现代操作系统中使用的标准 Ping程序。

标准的Ping工作时发送因特网控制报文协议(ICMP)ECHO报文,远程机器对发送方返回响应。

该发送方则能够决定它自己和被探测的计算机之间的往返时延。

Java不提供发送和接收ICMP报文的任何功能,所以本实验需要在应用层用标准的UDP套接字和报文实现Ping。

在编译并部署后,客户机的一个运行结果如下:F:\EclipseWorkspace\UDPPinger\bin>java PingClient 192.168.173.240 7890 FROM SERVER: PING 0 2010-06-20 20:29:07FROM SERVER: No reply.FROM SERVER: PING 2 2010-06-20 20:29:09FROM SERVER: No reply.FROM SERVER: PING 4 2010-06-20 20:29:10FROM SERVER: No reply.FROM SERVER: PING 6 2010-06-20 20:29:11FROM SERVER: PING 7 2010-06-20 20:29:11FROM SERVER: PING 8 2010-06-20 20:29:11FROM SERVER: PING 9 2010-06-20 20:29:11可见第1个、第3个与第5个PING报文没有得到响应。

以下是服务器端对应的运行结果:D:\jie.tian\Java\UDP Pinger>java PingServer 7890Received from + 192.168.172.9: PING 0 2010-06-20 20:29:07Reply sent.Received from + 192.168.172.9: PING 1 2010-06-20 20:29:08Reply not send.Received from + 192.168.172.9: PING 2 2010-06-20 20:29:09Reply sent.Received from + 192.168.172.9: PING 4 2010-06-20 20:29:10Reply sent.Received from + 192.168.172.9: PING 6 2010-06-20 20:29:11Reply sent.Received from + 192.168.172.9: PING 7 2010-06-20 20:29:11Reply sent.Received from + 192.168.172.9: PING 8 2010-06-20 20:29:11Reply sent.Received from + 192.168.172.9: PING 9 2010-06-20 20:29:11Reply sent.Received from + 192.168.172.9: PING 3 2010-06-20 20:29:09Reply sent.Received from + 192.168.172.9: PING 5 2010-06-20 20:29:10Reply sent.以下分别是服务器程序和客户机程序的Java 源代码。

计算机网络课程设计(ping)

计算机网络课程设计(ping)

计算机网络课程设计Ping程序设计(后附源码)四川大学黄昊1143041195一.设计目标二.ICMP包结构三.校验和计算四.代码实现a)ICMP封包b)ICMP包转换成字节数组c)域名解析、选择IPv4地址d)原始套接口e)计算校验和五.运行结果六.总结一、设计目标本程序设计实现基本的ping程序功能,包括域名解析,ICMPv4回显包发送,统计丢失率等功能。

二、ICMP包结构ICMP包包含在IP包结构之内,是去除IP包头的部分,C#提供的Raw Socket功能可以实现包装ICMP结构,但自动包含IP包头等结构。

ICMP包由1Byte类型、1Byte SubCode、2字节校验和、2字节标示符、2字节序号,若干字节数据组成。

其结构图如下:4Byte类型号8 、子代码表示ICMP回显功能,默认标示符45、序号0、Data小节可填充数据,本程序填充了ASCII码‘a’十六进制61,填充24字节,所以整个包大小共32字节。

三、校验和计算对于ICMP包中的校验和,首先将校验和填0之后再整体计算。

计算时,按照2字节为一个单位累加,最后将所有溢出结果再次做加法,最后整体取反,返回一个2字节长的校验和。

具体计算方法伪代码如下:Int32 cksum = 0;for (int i = 0; i < 16; i++){cksum += ConvertToUInt16(packet, i * 2);}cksum = (cksum >> 16) + (cksum & 0xffff);cksum += (cksum >> 16);return (ushort)(~cksum);四、代码实现a)实现难度1:封装ICMP包。

为了方便操作与计算,在C#中,创建了一个ICMP包的结构体。

为了使包的逻辑结构与实际发送的结构一样,借助了C#提供的一个机制,叫非托管内存布局,使用StructLayoutAttribute属性,其中参数LayoutKind.Sequential指定了整个结构体的数据堆放方式为顺序堆放,保证内存中数据的连续性。

ping的简单实现课程设计

ping的简单实现课程设计

ping的简单实现课程设计一、教学目标本课程的教学目标是使学生掌握ping命令的基本使用方法,理解其工作原理,能够通过ping命令诊断网络连接问题。

具体包括:1.了解ping命令的作用和基本语法。

2.掌握如何使用ping命令检测网络连接。

3.理解ping命令的响应结果的含义。

4.能够独立操作计算机,运行ping命令。

5.能够分析ping命令的输出结果,判断网络连接状态。

6.能够根据实际情况,选择合适的ping命令参数。

情感态度价值观目标:1.培养学生对网络通信技术的兴趣和好奇心。

2.培养学生解决问题的能力和团队合作精神。

二、教学内容本课程的教学内容主要包括以下几个部分:1.ping命令的基本概念和语法。

2.ping命令的使用方法,包括如何检测网络连接。

3.ping命令的响应结果的解读。

4.如何在实际情况下,选择合适的ping命令参数。

三、教学方法本课程的教学方法包括:1.讲授法:讲解ping命令的基本概念、语法和原理。

2.实验法:引导学生实际操作ping命令,检测网络连接。

3.讨论法:分组讨论ping命令的输出结果,培养学生解决问题的能力。

四、教学资源本课程的教学资源包括:1.教材:《计算机网络基础》相关章节。

2.多媒体资料:PPT课件,网络连接检测的实验视频。

3.实验设备:计算机、网络环境。

以上是本课程的教学设计,希望能够帮助学生更好地掌握ping命令的使用,提高网络故障排除的能力。

五、教学评估本课程的教学评估将采用多元化的评估方式,以全面、客观、公正地评价学生的学习成果。

评估方式包括:1.平时表现:通过观察学生在课堂上的参与度、提问回答、小组讨论等表现,评估学生的学习态度和理解能力。

2.作业:布置相关的ping命令练习题,要求学生独立完成,通过作业的质量和完成时间评估学生的掌握程度。

3.实验报告:学生在实验过程中,需要撰写实验报告,描述实验过程、结果和收获,通过实验报告评估学生的实际操作能力和问题解决能力。

基于UDP的网络通讯软件设计说明

基于UDP的网络通讯软件设计说明

计算机网络与通讯创新试验基于UDP的网络通讯软件侯秦三这个软件主要功能是以UDP为基础实现两台电脑之间收发简单文本消息。

软件全部使用java编写,并以JavaBuilder8为工具进行编写与调试。

布局方式采用NULL方式,主要使用AWT的组件和部分SWING的组件。

使用方法如下:1 首先在输入IP地址的输入栏中输入想与之进行通信的主机的IP地址,即消息接受方的IP地址。

2 在消息编辑框中输入想发送的消息内容。

3 编辑完欲发送的消息后,点击“发送消息”按钮进行发送;4 双方发送的消息和发送方与接受方的IP地址都会在下面的空白区域----“频道”内显示。

6 如果没有输入IP地址便发送编辑完的文本消息,空白区域内会显示出提示信息提示用户应输入接受方的IP地址。

7 当频道内显示的消息太多时,可以按”刷新频道”来清除频道内全部信息!软件运行时候的抓图:本机测试结果的抓图效果程序代码与简要说明1 chatFrame类的代码:package chat;import .*;import java.io.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;/*** <p>Title: </p>* <p>Description: </p>* <p>Copyright: Copyright (c) 2004</p>* <p>Company: </p>* @author not attributable* @version 1.0*/public class chatFrame extends JFrame {JPanel contentPane;Label label1 = new Label();TextField textField1 = new TextField();Label label2 = new Label();TextField textField2 = new TextField();Button button1 = new Button();TextArea textArea1 = new TextArea();DatagramPacket sendpacket,receivepacket; //定义发送和接受数据包DatagramSocket sendsocket,receivesocket;//定义发送和接受DatagramSocket//Construct the framepublic chatFrame() {enableEvents(AWTEvent.WINDOW_EVENT_MASK);try {jbInit();}catch(Exception e) {e.printStackTrace();}}//Component initializationprivate void jbInit() throws Exception { //定义个组件和他们的布局contentPane = (JPanel) this.getContentPane();label2.setAlignment(Label.CENTER);label2.setFont(new java.awt.Font("SansSerif", 0, 15));label2.setForeground(Color.black);label2.setText("消息编辑框");label1.setBounds(new Rectangle(14, 17, 133, 32));contentPane.setLayout(null);this.setSize(new Dimension(500, 400));this.setTitle("用UDP实现聊天");textField1.setBackground(SystemColor.text);textField1.setColumns(0);textField1.setFont(new java.awt.Font("Dialog", 0, 16));textField1.setText("");textField1.setBounds(new Rectangle(129, 72, 200, 61));label1.setAlignment(Label.CENTER);label1.setFont(new java.awt.Font("Dialog", 0, 15));label1.setText("输入对方IP地址");label2.setBounds(new Rectangle(23, 86, 108, 28));try{sendsocket=new DatagramSocket(5000); //初始化receivesocket=new DatagramSocket(5001);}catch(SocketException se){ //可能产生Socketexception类的异常se.printStackTrace();System.exit(0);}button1.setBackground(Color.magenta);button1.setFont(new java.awt.Font("Dialog", 0, 13));button1.setLabel("发送消息");button1.setBounds(new Rectangle(374, 23, 88, 42));button1.addActionListener(new java.awt.event.ActionListener (){public void actionPerformed(ActionEvent e){button1_actionPerformed(e);}});textField2.setBackground(SystemColor.activeCaptionBorder);textField2.setFont(new java.awt.Font("Dialog", 1, 18));textField2.setLocale(java.util.Locale.getDefault());textField2.setText("");textField2.setBounds(new Rectangle(166, 21, 169, 29));textArea1.setFont(new java.awt.Font("Dialog", 0, 13));textArea1.setText("");textArea1.setBounds(new Rectangle(46, 157, 382, 185));contentPane.setBackground(new Color(113, 111, 159));jButton1.setBackground(Color.pink);jButton1.setBounds(new Rectangle(374, 86, 87, 42));jButton1.setFont(new java.awt.Font("Dialog", 0, 13));jButton1.setText("刷新频道");jButton1.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(ActionEvent e) {jButton1_actionPerformed(e);}});contentPane.add(label1, null);contentPane.add(textField2, null);contentPane.add(textField1, null);contentPane.add(label2, null);contentPane.add(textArea1, null);contentPane.add(jButton1, null);contentPane.add(button1, null);}//Overridden so we can exit when window is closedprotected void processWindowEvent(WindowEvent e) {super.processWindowEvent(e);if (e.getID() == WindowEvent.WINDOW_CLOSING) {System.exit(0);}}public void waitforpackets(){ //这个方法完成接受数据包的功能while(true){try{byte[]array=new byte[100];receivepacket=new DatagramPacket(array,array.length);//创建接受数据包的缓冲receivesocket.receive(receivepacket);//接受数据包textArea1.append("\nfrom "+receivepacket.getAddress() +" : ");byte data[]=receivepacket.getData();String received=new String(data,0);//将字节数组转化为字符串textArea1.append(received);}catch(IOException se){//可能产生的IOException类异常textArea1.append(se.toString() +"/n");se.printStackTrace();}}}void button1_actionPerformed(ActionEvent e){//这个方法完成发送数据包String str = textField2.getText();if(pareTo("")!=0){try{textArea1.append("\nto "+textField2.getText() +" : "+textField1.getText());String s=textField1.getText();byte data[]=new byte[100];s.getBytes(0,s.length(),data,0);sendpacket=new DatagramPacket(data,s.length(),InetAddress.getByName(textField2.getText()),5001);//创建发送的数据包sendsocket.send(sendpacket);//发送数据包}catch(IOException exc){textArea1.append(exc.toString() +"\n");exc.printStackTrace();}}elsetextArea1.setText("please input your friend's IP first!");}JButton jButton1 = new JButton();void jButton1_actionPerformed(ActionEvent e) {textArea1.setText("");}}2.chatapp类的代码:package chat;import .*;import java.io.*;import javax.swing.UIManager;import java.awt.*;/*** <p>Title: </p>* <p>Description: </p>* <p>Copyright: Copyright (c) 2004</p>* <p>Company: </p>* @author not attributable* @version 1.0*/public class chatApp {boolean packFrame = false;//Construct the applicationpublic chatApp() {chatFrame frame = new chatFrame();//Validate frames that have preset sizes//Pack frames that have useful preferred size info, e.g. from their layoutif (packFrame) {frame.pack();}else {frame.validate();}//Center the windowDimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();Dimension frameSize = frame.getSize();if (frameSize.height > screenSize.height) {frameSize.height = screenSize.height;}if (frameSize.width > screenSize.width) {frameSize.width = screenSize.width;}frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);frame.setVisible(true);frame.waitforpackets();}//Main methodpublic static void main(String[] args) {try {UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());}catch(Exception e) {e.printStackTrace();}new chatApp();}}。

《计算机网络基础课程设计》UDP

计算机网络基础课程设计报告题目:基于UDP的服务器程序学生姓名:学号:专业班级:同组姓名:指导教师:***设计时间: 2013年下学年第18周指导老师意见:评定成绩:签名:日期:年月日目录一、课程设计的目的和意义 (2)二、课程设计的内容和要求 (2)三、课程设计的相关技术 (2)四、课程设计过程 (3)五、程序原代码 (5)六、程序运行截图 (8)七、课程设计小结 (8)一、课程设计的目的和意义目的:设计一个基于UDP的服务器意义:UDP是TCP/IP协议族为传输层设计的两个协议之一,它在进程与进程的通信过程中,提供了有限的差错校验功能,是一种无连接的,不可靠的协议。

UDP在一个较低的水平上完成进程之间的通信,在收到分组的时候没有流量控制机制也没有确认机制,适用于可靠性比较高的局域网。

由于UDP采取了无连接的方式,因此协议简单,在一些特定的应用中协议运行效率高。

UDP适合一些实时的应用,如IP电话,视频会议,它们要求源主机以恒定的速率发送数据,并且在网络出现拥塞时,可以丢失一些数据,但是延迟不能太大。

基于这些特点,流式多媒体通信、多播等应用在传输层采用的就是UDP协议。

因为UDP具有TCP所望尘莫及的速度优势。

虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。

反观UDP 由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。

二、课程设计的内容和要求根据后面介绍的UDP 协议的工作原理,编写程序实现基于UDP 的服务器。

1)以命令行形式运行:UdpServer serve_port 其中,UdpServer 为程序名,server_port 为服务器使用的端口号。

2)输出内容:服务器与客户端的交互过程,例如:UDP Server Recceive:。

UDPServer Send:。

三、课程设计的相关技术UDP 协议是一种无连接的不可靠的传输层协议。

(完整word版)计算机网络实验之Ping程序的设计与实现

课程名称计算机网络实验序号实验五实验项目Ping程序的设计与实现2017年03月25 日实验报告要求1、实验报告封面填表说明(每份实验报告必须附上封面)(1)课程名称:要求与实验大纲和实验指导书中的课程名称一致。

(2)实验序号:指该课程的第几个实验。

(3)实验项目:要求与实验大纲和实验指导书中的实验项目一致。

(4)实验地点:填写完成该实验项目所在的实验室名称。

(5)实验学时:要求与实验大纲和实验指导书中完成该实验项目所需学时一致。

(6)实验类型:是指演示性、操作性、验证性、综合性、设计性。

演示性:教师操作,学生观察,验证理论、说明原理和方法。

操作性:学生按要求动手拆装、调试实验装置或上机操作,掌握其基本原理和方法。

验证性:按实验指导书(教材)要求,由学生通过操作验证所学理论,加深对理论、知识的理解,掌握基本实验知识、方法、技能、数据处理等。

综合性:实验内容涉及本课程的综合知识或相关课程的知识,运用多的知识、多种方法,按要求或自拟实验方案进行实验。

主要培养学生综合运用所学知识、实验方法和实验技能,以培养其分析、解决问题的能力。

设计性:给定实验目的、要求和实验条件,学生自己设计实验方案并加以实现的实验。

学生独立完成从查阅资料、拟定实验方案、实验方法和步骤(或系统分析和设计)、选择仪器设备(或自行设计缺制作)进行实验并完成实验全过程,形成实验报告,培养学生自主实验的能力。

(1)批改:全部批改及更正错误。

(2)评分:按百分制评分,不能评分为“优、良、中、差”或“A、B、C”。

(3)签名及批改日期:任课教师必须在每份学生实验报告中签名和写上批改日期。

(4)成绩:填写学生实验成绩表,实验成绩作为考试成绩评定的依据。

(4)评语:任课教师批改学生实验报告时,应给出简明扼要的评语。

二、实验原理与内容1、一种网络诊断工具2、发送ICMP回送请求报文3、接收 ICMP回送应答报文4、 IP报文格式5、WinSock原始套接字的使用方法与API函数W insock原始套接字编程过程中,服务器端/客户端的编程都按照以下步骤:初始化套接字(WSAStartup)创建套接字(socket或WSASocket)向服务器通信(sendto/recvfrom)关闭套接字(closesocket)结束使用套接字(WSACleanup)6、三种WinSock地址结构①用的Winsock地址结构sockaddr ,针对各种通信域的套接字,存储它们的地址4.编写各个函数代码块5.编译,运行实验代码如下:(温馨提醒:意要在.cpp文件的前后添加#include"stdafx.h" (是预编译处理器把stdafx.h文件中的内容加载到程序中来。

udp实验报告 计算机网络

udp实验报告计算机网络
《UDP实验报告-计算机网络》
一、实验目的
本实验旨在通过对UDP协议的实验,加深对计算机网络中传输层协议的理解,
掌握UDP协议的特点、优缺点以及适用场景。

二、实验环境
本次实验使用了一台服务器和一台客户端,它们通过局域网连接,并且安装了
相应的网络调试工具和UDP通信软件。

三、实验内容
1. UDP协议的特点
UDP是用户数据报协议,是一种无连接的、不可靠的传输协议。

它不需要建立
连接,也不保证数据的可靠性和顺序性,因此传输效率较高。

2. UDP协议的优缺点
优点:UDP协议的头部开销小,传输效率高;适用于实时性要求较高的应用场景,如视频会议、在线游戏等。

缺点:UDP协议不提供可靠性保证,容易丢包;不支持拥塞控制和流量控制,
对网络负载和稳定性要求较高。

3. UDP协议的适用场景
UDP适用于实时性要求高、数据量较小、对可靠性要求不高的应用场景,如音频、视频的实时传输,以及一些简单的网络通信协议。

四、实验结果
通过对UDP协议的实验,我们成功地实现了服务器和客户端之间的UDP通信,
实时传输了一些简单的文本数据,并观察到了UDP协议的特点和优缺点。

五、实验总结
本次实验使我们更深入地了解了UDP协议的特点、优缺点以及适用场景,对于今后的网络应用开发和调试工作具有重要的参考价值。

六、实验感想
通过本次实验,我们对计算机网络中的传输层协议有了更深入的理解,也增强了我们对网络通信技术的兴趣,希望能够在未来的学习和工作中更好地应用所学知识。

实验十 UDP和Ping实验

nSumBytes = len + 12;
char * sendBuf; sendBuf = new char[nSumBytes]; CopyMemory(sendBuf,sendData.FrameHead,4); CopyMemory(sendBuf+4,&(sendData.DataPackageLen),4); CopyMemory(sendBuf+8,buf,len);
UDP 由于不需要建立连接,所以它的传输效率要比 TCP 高。但它不能保证所有数据都 能准确有序地到达目的地,不保证顺序性、可靠性和无重复性。它是无连接的服务。以独立 的信息报进行传输。通信端点使用 UDP 对应的 Internet 地址,双方不需要互连,按固定的 最大长度进行传输,因而适用于单个报文传输。
4
CopyMemory(sendBuf+8+len,sendData.FrameTail,4);
//发送数据 while (nSendBytes < nSumBytes) {
nBytes = sendto(m_UDPSocket,sendBuf+nSendBytes,nSumBytes-nSendBytes,0,(sockaddr*)&m_RemoteAddr,sizeof (m_RemoteAddr));
接收数据线程
UINT CUDPSocket::RecvThread(LPVOID lparam) {
CUDPSocket *pSocket; pSocket = (CUDPSocket*)lparam; fd_set fdRead; int ret; TIMEVAL aTime;
2
char * recvBuf=NULL; _sec = 1; _usec = 0; SOCKADDR_IN tmpAddr; int tmpRecvLen; int recvLen; int iErrorCode; char * recvedBuf = NULL; int recvedBufLen; while (TRUE) {
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档