用户数据报协议( UDP ) 是网络信息传输的另一种形式、 基于 UDP 的通信和基于 TCP 的通信不同,基于 UDP 的信息传递更快,但不提高可靠的保证。 使用 UDP 传递数据时,用户无法知道数据是否正确地到达主机,也不能确定到达目的地的顺序是否和发送的数据是否相同,虽然 UDP 是一种不可靠的协议,但如果需要较快地传输信息,并能容忍小的错误,可以考虑使用 UDP 。
基于 UDP 通信的基本模式如下:
将数据打包( 称为数据包 ),然后将数据包发往目的地。
接收别人发来的数据包,然后查看数据包。
下面时总结的 UDP 程序的步骤
发送数据包:
( 1 ) 使用 DatagramSocket( ) 创建一个数据包套接字。
( 2 ) 使用 DatagramSocket( byte[ ] buf,int length,InetAddress address,int port ) 创建要发送的数据包。
( 3 ) 使用 DatagramSocket类的 send ( ) 方法发送数据包.
接受数据包:
( 1 ) 使用 DatagramSocket( int port ) 创建数据包套接字,绑定到指定的端口。
( 2 ) 使用 DatagramSocket( byte[ ] buf,int length) 创建字节数组来接受数据包。
( 3 ) 使用 DatagramSocket 类的 receive( ) 方法接受 UDP 包。
DatagramPacket 类
java.net 包的 DatagramPacket 类用来表示数据包。 DatagramPacket 类的构造函数有:
DatagramPacket( byte[ ] buf, int length )
DatagramPacket( byte[ ] buf,int length,InetAddress addresss,int port )
第一种构造函数创建 DatagramPacket 对象,指定了数据包的内存空间和大小。第二种构造函数不仅指定了数据包的内存空间和大小,还指定了了数据包的目标地址和端口。在发生数据时,必须指定收方的 Socket 地址和端口号,因此使用第二种构造函数可创建发送数据的 DatagramPacket 对象。
DatagramSocket 类
java.net 包中的 DatagramSocket 类用于表示发送和接受数据包的套接字。该类的构造函数有:
DatagramSocket( )
DatagramSocket( int port )
DatagramSocket( int port,inetAddress addr )
第一种构造函数创建 DatagramSocket 对象,构造数据报套接字并将其绑定到本地主机上任何可用的端口。第二种构造函数创建 DatagramSocket 对象,创建数据报套接字并将其绑定到本地主机上的指定端口。第三种构造函数创建 DatagramSocket 对象,创建数据报套接字并将其绑定到指定的本地地址。第三种构造函数适用于有多块网卡和多个 IP 地址的情况。