tcp和udp的区别,测试实例

合集下载

UDP与TCP的对比分析

UDP与TCP的对比分析

实训报告UDP与TCP的对比分析1.实训目的1)熟悉UDP与TCP协议的主要特点及支持的应用协议2)理解UDP的无连接通信与TCP的面向连接通信3)熟悉TCP报文段和UDP报文的数据封装格式2.实训拓扑图3.主要操作步骤及实训结果记录(1)任务一:观察UDP无连接的工作模式步骤1:捕获UDP事件注意:本步骤仅DNS,没有UDP。

因为UDP无连接。

✧步骤2:分析UDP无连接的工作过程本步骤仅查看第4层中UDP报文段的内容。

注意观察并分析以下几项内容:●运输层的UDP发送DNS的请求之前是否有先建立连接;●记录UDP的用户数据报首部中的LENGTH字段的值,分析该报文的首部及数据部分的长度。

分析完成后单击Reset Simulation(重置模拟)按钮,将原有的事件全部清空。

事件一:事件二:事件三:事件四:(2)任务二:观察TCP面向连接的工作模式 步骤1:捕获TCP事件✧步骤2:分析TCP面向连接的工作过程本步骤仅查看第4层中TCP报文段的内容。

注意观察并分析以下几项内容:●在捕获到的第一个HTTP事件之前及最后一个HTTP事件之后是否有TCP事件;●第一个以及最后一个HTTP事件对应的TCP报文中的sequence number(序号)、ACK number(确认号)的值以及它们与data length(数据长度)的关系;●并查看TCP报文首部中固定部分的长度。

分析完成后单击Reset Simulation(重置模拟)按钮,将原有的事件全部清空。

事件一:事件二:事件三:事件四:4.实训结果分析及心得体会(1) TCP报文首部中的序号和确认号有什么作用?答:序号和确认号:是TCP可靠传输的关键部分。

序号是本报文段发送的数据组的第一个字节的序号。

在TCP传送的流中,每一个字节一个序号。

序号确保了TCP传输的有序性。

确认号,即ACK,指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到。

无线数传应用中TCP与UDP的比较

无线数传应用中TCP与UDP的比较

目前,由于GPRS和CDMA固有的特性,在各个领域中GPRS和CDMA的应用也越来越广泛,但是关于传输中使用TCP/IP协议还是UDP协议,却争论很多。

这里先简单的说一下TCP与UDP的区别:1、基于连接与无连接2、对系统资源的要求(TCP较多,UDP少)3、UDP程序结构较简单4、流模式与数据报模式5、TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证另外结合GPRS网络的情况具体的谈一下他们的区别:1、TCP传输存在一定的延时,大概是1600MS(移动提供),UDP响应速度稍微快一些。

2、TCP包头结构源端口16位目标端口16位序列号32位回应序号32位TCP头长度4位reserved6位控制代码6位窗口大小16位偏移量16位校验和16位选项32位(可选)这样我们得出了TCP包头的最小大小就是20字节.UDP包头结构源端口16位目的端口16位长度16位校验和16位UDP的包小很多.确实如此.因为UDP是非可靠连接.设计初衷就是尽可能快的将数据包发送出去.所以UDP协议显得非常精简.3、GPRS网络端口资源,UDP十分紧缺,变化很快;而TCP采用可靠链路传输,不存在端口变化的问题。

工业场合的应用一般都有以下特点,1、要求实时传输,但也有一些场合是定时传输,总的来说在整个传输过程中要求服务器中心端和GPRS终端设备能相互的、实时的传输数据。

TCP本身就是可靠链路传输,提供一个时时的双向的传输通道,能很好的满足工业现场传输的要求。

但是GPRS网络对TCP链路也存在一个限制:此条链路在长时间(大概20分钟左右,视具体情况而定)没有数据流量,会自动降低此链路的优先级直至强制断开此链路。

所以在实际使用中也会采用心跳包(一般是一个字节的数据)来维持此链路。

UDP由于自身特点,以及GPRS网络UDP端口资源的有限性,在一段时间没有数据流量后,端口容易改变,产生的影响就是从服务器中心端向GPRS终端发送数据,GPRS终端接收不到。

有关TCPUDP的使用例子

有关TCPUDP的使用例子

有关TCPUDP的使用例子TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是网络通信中常用的两种传输协议。

它们在应用层之下的传输层提供了不同的传输方式和特性。

下面是关于TCP和UDP的使用例子。

1.聊天应用程序TCP协议适用于需要可靠传输的应用场景,比如聊天应用程序。

用户在手机或电脑上运行聊天应用程序,发送聊天信息给其他用户。

TCP协议确保信息按照发送的顺序接收,并且在传输过程中不会受到丢包或乱序的影响。

每个聊天消息的发送和接收都通过TCP连接完成,确保信息的可靠传输。

2.文件传输TCP协议也适用于大文件传输。

例如,用户需要通过互联网将大型文件发送给其他用户。

TCP协议保证了文件在传输过程中的完整性和准确性。

它会自动检测和纠正丢失或损坏的数据包,并确保接收方和发送方之间的数据一致性。

这种方式适用于需要确保每个数据包都到达的场景,尽管传输速度可能稍慢。

3.实时流媒体UDP协议适用于实时流媒体应用程序,如在线直播或在线游戏。

UDP提供了更低的延迟和更快的传输速率,但不提供像TCP那样的可靠性和顺序性。

在直播或游戏中,用户希望能快速看到视频或游戏画面,而不必要求每个数据包都到达和按顺序排列。

这样,UDP协议的特性更适合这类应用场景。

4.DNS(域名系统)DNS是将域名解析为IP地址的系统。

UDP协议通常用于DNS查询,因为它是一种简单的请求-响应协议。

当用户在浏览器中输入一个域名时,DNS解析请求将通过UDP协议发送到DNS服务器。

UDP快速地将请求传递给服务器,并且不需要进行复杂的连接设置,因为DNS查询通常是短暂而频繁的交互。

5.游戏中的多播UDP也可以用于多播(Multicast)应用,其中一台计算机可以将数据包发送给多个接收者。

在在线游戏中,UDP协议可用于将游戏状态信息快速广播给所有玩家。

多播可以减少网络流量,因为只有一次广播就可以到达多个接收者,而不是向每个接收者发送单独的数据包。

TCP和UDP的区别及各自优缺点区别

TCP和UDP的区别及各自优缺点区别

TCP和UDP的区别及各⾃优缺点区别区别⼀、是否基于连接TCP是⾯向连接的协议,⽽UDP是⽆连接的协议。

即TCP⾯向连接;UDP是⽆连接的,即发送数据之前不需要建⽴连接。

区别⼆、可靠性和有序性区别TCP 提供交付保证(Tcp通过校验和,重传控制,序号标识,滑动窗⼝、确认应答实现可靠传输),⽆差错,不丢失,不重复,且按序到达,也保证了消息的有序性。

该消息将以从服务器端发出的同样的顺序发送到客户端,尽管这些消息到⽹络的另⼀端时可能是⽆序的。

TCP协议将会为你排好序。

UDP不提供任何有序性或序列性的保证。

UDP尽最⼤努⼒交付,数据包将以任何可能的顺序到达。

TCP的逻辑通信信道是全双⼯的可靠信道,UDP则是不可靠信道区别三、实时性UDP具有较好的实时性,⼯作效率⽐TCP⾼,适⽤于对⾼速传输和实时性有较⾼的通信或⼴播通信。

区别四、协议⾸部⼤⼩TCP⾸部开销20字节; UDP的⾸部开销⼩,只有8个字节。

区别五、运⾏速度TCP速度⽐较慢,⽽UDP速度⽐较快,因为TCP必须创建连接,以保证消息的可靠交付和有序性,毕竟TCP协议⽐UDP复杂。

区别六、拥塞机制UDP没有拥塞控制,因此⽹络出现拥塞不会使源主机的发送速率降低(对实时应⽤很有⽤,如IP电话,实时视频会议等)区别七、流模式(TCP)与数据报模式(UDP);TCP⾯向字节流,实际上是TCP把数据看成⼀连串⽆结构的字节流;UDP是⾯向报⽂的。

区别⼋、资源占⽤TCP对系统资源要求较多,UDP对系统资源要求较少。

TCP被认为是重量级的协议,⽽与之相⽐,UDP协议则是⼀个轻量级的协议。

因为UDP传输的信息中不承担任何间接创造连接,保证交货或秩序的的信息。

这也反映在⽤于承载元数据的头的⼤⼩。

区别九、应⽤每⼀条TCP连接只能是点到点的;UDP⽀持⼀对⼀,⼀对多,多对⼀和多对多的交互通信。

基于UDP不需要建⽴连接,所以且适合多播的环境,UDP是⼤量使⽤在游戏和娱乐场所。

优缺点基于上⾯的区别;TCP和UDP的优缺点也很明显了。

UDP的意思是什么UDP与TCP的区别

UDP的意思是什么UDP与TCP的区别

UDP的意思是什么UDP与TCP的区别 ⼤家有没有听说过“udp”这个新词,知道它的意思是什么吗?下⾯是店铺⼩编为⼤家整理的“UDP的意思是什么 UDP与TCP 的区别”,欢迎参阅。

内容仅供参考,想要了解更多关于词义解释的内容,请关注店铺实⽤资料栏⽬。

UDP的意思是什么 UDP与TCP的区别 udp的意思:是User Datagram Protocol的简称,中⽂名是⽤户数据包协议,是 OSI 参考模型中⼀种⽆连接的传输层协议,提供⾯向事务的简单不可靠信息传送服务。

UDP 协议基本上是IP协议与上层协议的接⼝。

它是IETF RFC 768是UDP的正式规范。

UDP协议的主要作⽤是将⽹络数据流量压缩成数据包的形式。

⼀个典型的数据包就是⼀个⼆进制数据的传输单位。

... 词性:abbr. ⽤户数据报协议(=User Datagram Protocol) Uliana Uonuki Ulisso Uzhviy Uliger Uborka Uzurov ugt. UGPase uberty udp的作⽤: 为了在给定的主机上能识别多个⽬的地址,同时允许多个应⽤程序在同⼀台主机上⼯作并能独⽴地进⾏数据包的发送和接收,设计⽤户数据报协议UDP。

使⽤UDP协议包括: TFTP、 SNMP、NFS、DNS、BOOTP。

UDP使⽤底层的互联⽹协议来传送报⽂,同IP⼀样提供不可靠的⽆连接数据包传输服务。

它不提供报⽂到达确认、排序、及流量控制等功能。

UDP适⽤于⼀次只传送少量数据、对可靠性要求不⾼的应⽤环境。

⽐如,我们经常使⽤“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对⽅主机发送UDP数据包,然后对⽅主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么⽹络就是通的。

例如,在默认状态下,⼀次“ping”操作发送4个数据包(如图2所⽰)。

⼤家可以看到,发送的数据包数量是4包,收到的也是4包(因为对⽅主机收到后会发回⼀个确认收到的数据包)。

TCP与UDP的区别及其应用

TCP与UDP的区别及其应用

TCP与UDP的区别及其应用TCP(传输控制协议)和UDP(用户数据报协议)是两种不同的传输协议,它们在网络通信中起着非常重要的作用。

虽然它们都是在网络通信中传输数据的协议,但是它们有很大的区别。

在本文中,我将分别介绍TCP和UDP的特点、区别及其在各种应用中的使用。

一、TCP的特点及应用1. TCP的特点TCP是一种面向连接的协议,它在传输数据之前需要先建立连接,然后传输数据,传输结束后再断开连接。

它提供可靠的、按序传输的数据传输服务,能够保证数据的完整性和可靠性。

TCP使用三次握手来建立连接,四次挥手来断开连接,在传输数据时会进行数据校验和确认。

因此,它非常适合对数据传输的要求比较高的应用场景。

2. TCP的应用TCP广泛应用于各种需要可靠传输的应用场景,包括但不限于以下几个方面:(1)网络浏览:当用户访问网页时,浏览器会使用TCP协议与服务器建立连接,传输页面内容。

(2)文件传输:在文件传输过程中,TCP可以保证文件的完整性和可靠性,确保文件在传输过程中不会丢失或损坏。

(3)电子邮件:电子邮件的发送和接收过程中需要使用TCP协议来保证数据传输的可靠性。

(4)远程登录:如Telnet、SSH等远程登录方式都使用TCP协议来传输数据。

(5)数据库访问:数据库访问时需要使用TCP协议来传输数据。

二、UDP的特点及应用1. UDP的特点UDP是一种无连接的协议,它不需要在传输数据之前建立连接,也不保证数据的完整性和可靠性。

UDP是一种简单的数据传输协议,它仅提供数据传输的功能,不对数据传输进行确认和校验。

因此,UDP的传输效率比TCP高,但可靠性较差。

由于UDP不需要建立连接,所以它的开销比较小,适合对实时性要求较高的应用场景。

2. UDP的应用UDP主要用于那些对实时性要求较高的应用场景,包括但不限于以下几个方面:(1)实时视频、音频传输:视频会议、实时语音通话等应用中使用UDP来传输数据,因为在这些应用中,实时性比可靠性更为重要。

TCPUDP有什么区别

TCPUDP有什么区别前⾔计算机分层中的传输层,主要是负责计算机之间的数据传输,TCP 和 UDP 都属于传输层协议。

在实际开发过程中,需要根据实际需求的来选择适当的传输协议。

在这⾥我们简单总结下 TCP、UDP 的特点和区别以及实际开发中如何选择。

TCP 和 UDP 的定义TCP 是⾯向有连接,可靠的流协议。

保证两端通讯主机之间的通信可达,可以处理丢包、乱序等异常,可以有效利⽤带宽、缓解⽹络拥堵。

UDP 是⾯向⽆连接,不可靠的数据报协议。

不会处理丢包、乱序等异常,⼀般交给上层的应⽤层处理。

UDP 的特点及使⽤场景UDP 不提供复杂的控制机制,利⽤ IP 提供⾯向⽆连接的通信服务,随时都可以发送数据,处理简单且⾼效,经常⽤于以下场景:①包总量较⼩的通信(DNS、SNMP)②视频、⾳频等多媒体通信(即时通信)③⼴播通信TCP 的特点及使⽤场景相对于 UDP,TCP 实现了数据传输过程中的各种控制,可以进⾏丢包时的重发控制,还可以对次序乱掉的分包进⾏顺序控制。

在对可靠性要求较⾼的情况下,可以使⽤ TCP,即不考虑 UDP 的时候,都可以选择 TCP。

总结这⾥简单总结下:1.TCP 是⾯向连接的,UDP 是⾯向⽆连接的;故 TCP 需要建⽴连接和断开连接,UDP 不需要。

2.TCP 是流协议,UDP 是数据包协议;故 TCP 数据没有⼤⼩限制,UDP 数据报有⼤⼩限制(UDP 协议本⾝限制、数据链路层的 MTU、缓存区⼤⼩)。

3.TCP 是可靠协议,UDP 是不可靠协议;故 TCP 会处理数据丢包重发以及乱序等情况,UDP 则不会处理。

TCP 为什么要三次握⼿,四次挥⼿?前⾔TCP 属于传输层协议,是⾯向有连接,可靠的流协议。

⾯对有连接这个特性,TCP 就有建⽴连接和断开连接的过程。

我们分别了解建⽴连接和断开连接的流程以及当中的⼀些疑问。

TCP 建⽴连接和断开连接流程⾸先我们来看下这张经典的流程图:握⼿过程可以简化为下⾯的四次交互:1.Client 端⾸先发送⼀个 SYN 包,告诉 Server 端我的初始序列号是 X;Client 端进⼊了 SYN-SENT(同步已发送状态)状态。

实验使用Wireshark分析UDP

实验使用W i r e s h a r k分析U D PIMB standardization office【IMB 5AB- IMBK 08- IMB 2C】实验六使用W i r e s h a r k分析U D P 一、实验目的比较TCP和UDP协议的不同二、实验环境与因特网连接的计算机,操作系统为Windows,安装有Wireshark、IE等软件。

三、实验步骤1、打开两次TCP流的有关跟踪记录,保存在中,并打开两次UDP流中的有关跟踪文件。

如图所示:图1:TCP 流跟踪记录图2:UDP流跟踪记录2、分析此数据包:(1)TCP传输的正常数据:文件的分组1到13中显示了TCP连接。

这个流中的大部分信息与前面的实验相同。

我们在分组1到分组3中看到了打开连接的三次握手。

分组10到分组13显示的则是连接的终止。

我们看到分组10既是一个带有FIN标志的请求终止连接的分组,又是一个最后1080个字节的(序号是3921—5000)的重传。

TCP将应用程序写入合并到一个字节流中。

它并不会尝试维持原有应用程序写人的边界值。

我们注意到TCP并不会在单个分组中传送1000字节的应用程序写入。

前1000个字节会在分组4种被发送,而分组5则包含了1460个字节的数据-----一些来自第二个缓冲区,而另一些来自第三个缓冲区。

分组7中含有1460个字节而分组8中则包含剩余的1080个字节。

(5000-0=1080)我们注意到实际报告上的秒是从初始化连接的分组1开始到关闭连接的分组10结束。

分组11—13未必要计入接收端应用程序的时间内,因为一旦接收到第一个FIN,TCP层便马上发送一个关闭连接的信号。

分组11—13只可能由每台计算机操作系统得TCP层后台传输。

如果我们注意到第一个包含数据的分组4和最后一个分组8之间的时间,我们就大约计算出和由UDP接收端所报告的秒相同的时间。

这样的话,增加TCP传输时间的主要原因就是分组10中的重传。

TCP和UDP区别

TCP和UDP区别TCP(Transmission Control Protocol,传输控制协议)TCP协议是⼀种可靠的、⼀对⼀的、⾯向有连接的通信协议,TCP主要通过下列⼏种⽅式保证数据传输的可靠性:(1)在使⽤TCP协议进⾏数据传输时,往往需要客户端和服务端先建⽴⼀个“通道“、且这个通道只能够被客户端和服务端使⽤,所以TCP 传输协议只能⾯向⼀对⼀的连接。

(2)为了保证数据传输的准确⽆误,TCP传输协议将⽤于传输的数据包分为若⼲个部分(每个部分的⼤⼩根据当时的⽹络情况⽽定),然后在它们的⾸部添加⼀个检验字节。

当数据的⼀个部分被接收完毕之后,服务端会对这⼀部分的完整性和准确性进⾏校验,校验之后如果数据的完整度和准确度都为100%,在服务端会要求客户端开始数据下⼀个部分的传输,如果数据的完整性和准确性与原来不相符,那么服务端会要求客户端再次传输这个部分。

客户端与服务端在使⽤TCP传输协议时要先建⽴⼀个“通道”,在传输完毕之后⼜要关闭这“通道”,前者可以被形象地成为“三次握⼿”,⽽后者则可以被称为“四次挥⼿”。

通道的建⽴——三次握⼿:(1)在建⽴通道时,客户端⾸先要向服务端发送⼀个SYN同步信号。

(2)服务端在接收到这个信号之后会向客户端发出SYN同步信号和ACK确认信号。

(3)当服务端的ACK和SYN到达客户端后,客户端与服务端之间的这个“通道”就会被建⽴起来。

通道的关闭——四次挥⼿:(1)在数据传输完毕之后,客户端会向服务端发出⼀个FIN终⽌信号。

(2)服务端在收到这个信号之后会向客户端发出⼀个ACK确认信号。

(3)如果服务端此后也没有数据发给客户端时服务端会向客户端发送⼀个FIN终⽌信号。

(4)客户端在收到这个信号之后会回复⼀个确认信号,在服务端接收到这个信号之后,服务端与客户端的通道也就关闭了。

TCP协议能为应⽤程序提供可靠的通信连接,使⼀台计算机发出的字节流⽆差错地发往⽹络上的其他计算机,对可靠性要求⾼的数据通信系统往往使⽤TCP协议传输数据。

tcp协议与 udp协议的区别

TCP 与UDP的区别很多文章都说TCP协议可靠,UDP协议不可靠!为什么前者可靠,后者不可靠呢?既然UDP协议不可靠,为什么还要使用它呢?所谓的TCP协议是面向连接的协议,面向连接是什么呢?TCP和UDP都是传输层的协议!从编程的角度看,就是两个模块(模块就是代码的集合,一系列代码的组合提供相应的功能!模块化最终目的就是:分工协作!模块化好处:便于扩展开发以及维护!)。

先说TCP协议:这个协议,是面向的连接!面向连接这个概念,我们要从物理层看起。

大家都知道,因为“信道复用技术”的迅猛发展,才促使了计算机网络的发展!如果没有“信道复用技术”,那么单条线路上(这里的线路指物理传输介质,例如:双绞线、光纤、电话线)单位时间内只能供一台计算机使用!还是举例说明:就拿你自己的计算机来说,你跟同学“小明”聊天的时候,就不能跟另外一位同学“小强”聊天,如果你想同时跟两位同学聊天,那么你就得装两条线路!那么同时与第三位、第四位同学。

第N位同学聊天的时候,你需要装几根线路?全世界人民聊天的时候,又需要装几根线路?“信道复用技术”实现了,在同一条线路上,单位时间内可供X台计算机同时通信!Toad知道以下几种复用技术:1、频分复用2、时分复用3、波分复用4、码分复用5、空分复用6、统计复用7、极化波复用关于“信道复用技术”更深层次的问题,需要你自己去研究!上面我们提到了“信道复用技术”!知道了这一点,我们就很容易明白“物理信道”上的“虚拟信道”概念了!不同的信道复用技术,使用不同的复用技术,目的就是创建“虚拟信道”。

一个TCP协议连接其实就是在物理线路上创建的一条“虚拟信道”。

这条“虚拟信道”建立后,在TCP协议发出FIN包之前(两个终端都会向对方发送一个FIN包),是不会释放的。

正因为这一点,TCP协议被称为面向连接的协议!UDP协议,一样会在物理线路上创建一条“虚拟信道”,否则UDP协议无法传输数据!但是,当UDP协议传完数据后,这条“虚拟信道”就被立即注销了!因此,称UDP是不面向连接的协议!大家要知道,一种物理线路,单位时间内,能够创建的“虚拟信道”是有限的!从这个问题,大家应该明白了TCP协议和UDP协议为什么会共存了吧,然而,这只是其中一个原因而已!那为什么又说TCP协议可靠,UDP协议不可靠呢?以上说的是一个原因,还有一个原因是:使用TCP协议传输数据,当数据从A端传到B端后,B端会发送一个确认包(ACK包)给A端,告知A端数据我已收到!UDP协议就没有这种确认机制!这一点,在做TCP协议首部分析时,会详加解释!QQ普通会员就是使用的UDP协议进行传输数据!既然UDP协议自身没有确认机制,这个工作可以交给应用层的进程来完成(QQ)!大家使用QQ的时候,感觉出错的几率还是非常小吧!当然,把这个确认工作完全交给QQ自身来做,就直接导致了,QQ软件体积增大!有些应用,对数据传输可靠性要求非常高,例如大家浏览网页,通过网页注册帐号、转帐等服务,这是不容许出错的,使用TCP协议能把出错的可能性降到最低(当然,网络自身很糟糕,TCP协议也没办法)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

package com.server;import java.io.OutputStreamWriter;import .Socket;public class TCPClient {/*** @param args* @author zzy*/public static void main(String[] args) throws Exception {Socket s = new Socket("127.0.0.1", 8083);OutputStreamWriter w = new OutputStreamWriter(s.getOutputStream());w.write("这里是客户端,Hello服务器,准备发到服务器端");w.flush();w.close();s.close();}}package com.server;import java.io.InputStreamReader;import .ServerSocket;import .Socket;public class TCPServer {/*** @param args* @author zzy*/public static void main(String[] args) throws Exception {ServerSocket ss = new ServerSocket(8083);while (true) {Socket s = ss.accept();System.err.println("A client has heen connected.");System.err.println("这里是服务器端"+TCPServer.class);InputStreamReader r = new InputStreamReader(s.getInputStream());int c = 0;while ((c = r.read()) > -1) {System.err.print((char) c);}r.close();s.close();}}}package com.server;import java.io.IOException;import .DatagramPacket;import .DatagramSocket;import .InetAddress;public class UDPClient {private byte[] buffer = new byte[1024];private DatagramSocket ds = null;/*** 构造函数,创建UDP客户端** @throws Exception* @author zzy*/public UDPClient() throws Exception {ds = new DatagramSocket();}/*** 设置超时时间,该方法必须在bind方法之后使用.** @param timeout* 超时时间* @throws Exception* @author zzy*/public final void setSoTimeout(final int timeout) throws Exception { ds.setSoTimeout(timeout);}/*** 获得超时时间.** @return 返回超时时间* @throws Exception* @author zzy*/public final int getSoTimeout() throws Exception {return ds.getSoTimeout();}public final DatagramSocket getSocket() {return ds;}/*** 向指定的服务端发送数据信息.** @param host* 服务器主机地址* @param port* 服务端端口* @param bytes* 发送的数据信息* @return 返回构造后俄数据报* @throws IOException* @author zzy*/public final DatagramPacket send(final String host, final int port,final byte[] bytes) throws IOException {DatagramPacket dp = new DatagramPacket(bytes, bytes.length, InetAddress .getByName(host), port);ds.send(dp);return dp;}/*** 接收从指定的服务端发回的数据.** @param lhost* 服务端主机* @param lport* 服务端端口* @return 返回从指定的服务端发回的数据.* @throws Exception* @author zzy*/public final String receive(final String lhost, final int lport)throws Exception {DatagramPacket dp = new DatagramPacket(buffer, buffer.length);ds.receive(dp);String info = new String(dp.getData(), 0, dp.getLength());return info;}/*** 关闭udp连接.**/public final void close() {try {ds.close();} catch (Exception ex) {ex.printStackTrace();}}/*** 测试客户端发包和接收回应信息的方法.** @param args* @throws Exception* @author zzy*/public static void main(String[] args) throws Exception {UDPClient client = new UDPClient();String serverHost = "127.0.0.1";int serverPort = 3366;client.send(serverHost, serverPort, ("你好!").getBytes());String info = client.receive(serverHost, serverPort);System.out.println("服务端回应数据:" + info);}}package com.server;import java.io.IOException;import .DatagramPacket;import .DatagramSocket;import .InetAddress;import .InetSocketAddress;import .SocketException;/*** @author zzy* */public class UDPServer {private byte[] buffer = new byte[1024];private DatagramSocket ds = null;private DatagramPacket packet = null;private InetSocketAddress socketAddress = null;private String orgIp;/*** 构造函数,绑定主机和端口.** @param host* 主机* @param port* 端口* @throws Exception*/public UDPServer(String host, int port) throws Exception {socketAddress = new InetSocketAddress(host, port);ds = new DatagramSocket(socketAddress);System.out.println("服务端启动!");}public final String getOrgIp() {return orgIp;}/*** 设置超时时间,该方法必须在bind方法之后使用.** @param timeout* 超时时间* @throws Exception*/public final void setSoTimeout(int timeout) throws Exception { ds.setSoTimeout(timeout);}/*** 获得超时时间.** @return 返回超时时间.* @throws Exception*/public final int getSoTimeout() throws Exception {return ds.getSoTimeout();}/*** 绑定监听地址和端口.** @param host* 主机IP* @param port* 端口* @throws SocketException*/public final void bind(String host, int port) throws SocketException { socketAddress = new InetSocketAddress(host, port);ds = new DatagramSocket(socketAddress);}/*** 接收数据包,该方法会造成线程阻塞.** @return 返回接收的数据串信息* @throws IOException*/public final String receive() throws IOException {packet = new DatagramPacket(buffer, buffer.length);ds.receive(packet);orgIp = packet.getAddress().getHostAddress();String info = new String(packet.getData(), 0, packet.getLength());System.out.println("接收信息:" + info);return info;}/*** 将响应包发送给请求端.** @param bytes* 回应报文* @throws IOException*/public final void response(String info) throws IOException {System.out.println("客户端地址: " + packet.getAddress().getHostAddress() + ",端口:" + packet.getPort());DatagramPacket dp = new DatagramPacket(buffer, buffer.length, packet .getAddress(), packet.getPort());dp.setData(info.getBytes());ds.send(dp);}/*** 设置报文的缓冲长度.** @param bufsize* 缓冲长度*/public final void setLength(int bufsize) {packet.setLength(bufsize);}/*** 获得发送回应的IP地址.** @return 返回回应的IP地址*/public final InetAddress getResponseAddress() {return packet.getAddress();}/*** 获得回应的主机的端口.** @return 返回回应的主机的端口.*/public final int getResponsePort() {return packet.getPort();}/*** 关闭udp监听口.**/public final void close() {try {ds.close();} catch (Exception ex) {ex.printStackTrace();}}/*** 测试方法.** @param args* @throws Exception*/public static void main(String[] args) throws Exception {String serverHost = "127.0.0.1";int serverPort = 3366;UDPServer udpServerSocket = new UDPServer(serverHost, serverPort);while (true) {udpServerSocket.receive();udpServerSocket.response("你好,漠漠之花!");}}}。

相关文档
最新文档