网络编程---UDP

来源:互联网 发布:sql存储过程怎么写 编辑:程序博客网 时间:2024/06/06 04:59

什么是UDP

UDP 是UserDatagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC768是UDP的正式规范。UDP在IP报文的协议号是17。

 

OSI模型中,UDP在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。

UDP和TCP的区别:http://blog.csdn.net/ljheee/article/details/50823050

UDP信息传递的方式分三类

①  单播Unicast:是客户端与服务器之间的点到点连接。

②  广播BroadCast:主机之间“一对所有”的通讯模式,广播者可以向网络中所有主机发送信息。广播禁止在Internet宽带网上传输(广播风暴)。

③  多播MultiCast:主机之间“一对一组”的通讯模式,也就是加入了同一个组的主机可以接受到此组内的所有数据。

这里需要注意的是:只有UDP才有广播、组播的传递方式;而TCP是一对一连接通信。多播的重点是高效的把同一个包尽可能多的发送到不同的,甚至可能是未知的设备。但是TCP连接是一对一明确的。

 UDP组播详解:http://blog.csdn.net/ljheee/article/details/51722792

在Java API中,实现UDP方式的编程,包含客户端网络编程和服务器端网络编程,主要由两个类实现,分别是:

(1) DatagramSocket

    DatagramSocket类实现“网络连接”,包括客户端网络连接和服务器端网络连接。实现的就是发送数据时的发射器,以及接收数据时的监听器的角色。

    该类既可以用于实现客户端连接,也可以用于实现服务器端连接。

(2) DatagramPacket

DatagramPacket类实现对于网络中传输的数据封装,也就是说,该类的对象代表网络中交换的数据。在UDP方式的网络编程中,无论是需要发送的数据还是需要接收的数据,都必须被处理成DatagramPacket类型的对象,该对象中包含发送到的地址、发送到的端口号以及发送的内容等。

DatagramPacket类的作用类似于现实中的信件。

 

UDP客户端有三个步骤:建立连接、发送数据\接收数据和关闭连接。

 

关于这两个类,做一个形象的比喻:使用UDP并不像使用TCP那样明确指明“服务器-客户端”,UDP通信双方均可做服务器和客户端,都需要先建立一个DatagramSocket----充当“邮局”角色,可以封装一个数据报DatagramPacket,即“信封”,发出去;也可以使用DatagramSocket“邮局”来收信,收信前,需提前准备一个“空信封”DatagramSocket(只指明待收数据的大小),收到数据后将数据封装到空信封。

 

关于UDP使用的详细例子:https://github.com/ljheee/ChatUDP

1 0
原创粉丝点击