《UDP的网络编程》.pdf
文本预览下载声明
核心提示:UDP 协议是一种不可靠的网络协议,它在通信实例的两端各
建立一个Socket ,但这两个Socket 之间并没有虚拟链路,这两个
Socket 只是发送、接收数据报的对象,Java 提供了DatagramSocket 对
象作为基于UDP 协议的Socket ,使用DatagramPacket 代表
DatagramSocket
UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个
Socket,但这两个Socket之间并没有虚拟链路,这两个Socket只是发
送、接收数据报的对象,Java提供了DatagramSocket对象作为基于UDP
协议的Socket,使用DatagramPacket代表DatagramSocket发送、接收
的数据报。
17.4.1 UDP协议基础
UDP协议是英文User Datagram Protocol的缩写,即用户数据报协议,
主要用来支持那些需要在计算机之间传输数据的网络连接。UDP协议从问
世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所
掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传
输层协议。尤其是在需要很强的实时交互性的场合,如网络游戏、视频
会议等,UDP协议更是显示出极强的威力。
UDP协议是一种面向非连接的协议,面向非连接指的是在正式通信前不必
与对方先建立连接,不管对方状态就直接发送。至于对方是否可以接收
到这些数据内容,UDP协议无法控制,因此说UDP协议是一种不可靠的协
议。
与前面介绍的TCP协议一样,UDP协议直接位于IP协议之上。实际上,
IP协议属于OSI参考模型的网络层协议,而UDP和TCP都属于传输层协
议。
UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。因为
UDP协议是面向非连接的协议,没有建立连接的过程,因此它的通信效率
高;但也正因为如此,它的可靠性不如TCP协议高。
UDP协议的主要作用是完成网络数据流量和数据报之间的转换:在信息的
发送端,UDP协议将网络数据流量封装数据报,然后将数据报发送出去;
在信息的接收端,UDP协议将数据报转换成实际数据内容。
实际上,我们可以认为基于UDP协议的Socket类似于一个码头,该码头
的作用就是负责发送、接收集装箱,一个数据报类似于一个集装箱。因
此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器端的
概念。Java中的DatagramSocket的作用类似于码头,而DatagramPacket
的作用类似于集装箱。
UDP和TCP简单的对比如下:
Ø TCP协议:可靠,传输大小无限制,但是需要连接建立时间,差错控
制开销大。
Ø UDP协议:不可靠,差错控制开销较小,传输大小限制在64K以下,
不需要建立连接。
17.4.2 使用DatagramSocket发送、接收数据
DatagramSocket本身只是码头,不维护状态,不能产生IO流,它的唯一
作用就是接收和发送数据报,Java使用DatagramPacket来代表数据报,
DatagramSocket接收和发送的数据都是通过DatagramPacket对象完成
的。
先看一下DatagramSocket的构造器:
Ø DatagramSocket():创建一个DatagramSocket实例,并将该对象绑
定到本机默认IP地址、本机所有可用端口中随机选择的某个端口。
Ø DatagramSocket(int prot):创建一个DatagramSocket实例,并将
该对象绑定到本机默认IP地址、指定端口。
Ø DatagramSocket(int port, InetAddress laddr):创建一个
DatagramSocket实例,并将该对象绑定到指定IP地址、指定端口。
通过上面三个构造器中任意一个构造器即可创建一个DatagramSocket实
例,通常在创建服务器时,我们创建指定端口的DatagramSocket实例——
这样保证其他客户端可以将数据发送到该服务器。一旦得到了
DatagramSocket实例之后,就可以通过如下两个方法来接收和发送数据:
Ø receive(DatagramPacket p):从该DatagramSocket中接收数据报。
Ø send(DatagramPacket p):以该DatagramSocket对象向外发送数据
报。
从上面两个方法可以看出,使用DatagramSocket发送数据报时,
DatagramSocket并不知道将该
显示全部