UDP(User Datagrams Protocol)用户数据报协议,是一种使用数据报的机制来传递信息的协议。数据报(Datagrams)是一种在不同机器之间传递的信息包,该信息包一旦从某一机器被发送给指定目标,那么该发送过程并不会保证数据一定到达目的地,甚至不保证目的地的存在真实性。反之,数据报被接受时,不保证数据没有受损,也不保证发送该数据报的机器仍在等待响应。
由此可见,UDP协议是一种基于数据报的快速的(因为它无需花时间去保证数据是否损坏,无需花时间确定接受方是否存在并等待响应)、无连接的、不可靠的信息包传输协议。
在java中,通过两个特定类来实现UDP协议顶层数据报,分别是DatagramPacket和DatagramSocket,其中DatagramPacket是一个数据容器,用来保存即将要传输的数据;而DatagramSocket实现了发送和接收DatagramPacket的机制,即实现了数据报的通信方式。 1 、atagramPacket
该类主要有四个常用构造方法,分别如下:
DatagramPacket(byte[] buff, int length)
DatagramPacket(byte[] buf, int offset, int length)
DatagramPacket(byte[] buf, int length, InetAddress address, int port)
DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)
第一个构造方法用于创建一个指定数据缓冲区大小和信息包的容量大小的DatagramPacket,第二个构造方法用于创建一个长度大小为length的缓冲区,并指定数据存储(读取)的偏移地址为offset的DatagramPacket。第三个创建一个指定缓冲区大小、传送(接受)IP地址、端口号的DatagramPacket。一般情况下,发送地址是由DatagramSocket指定。
常用的几个方法如下:
byte[] getData()
用于得到发送过来的DatagramPacket中的数据
void setData(byte[] buf)
用于将buf中的数据写入DatagramPacket中,以备发送。
InetAddress getAddress()
返回目标的InetAddress,一般用于发送。