《Java TCP/IP Socket编程》读书笔记(4)
2.3 UDP套接字
UDP协议提供了一种不同于TCP协议的端对端服务,实际上UDP只实现了两个功能:1)、 在IP协议的基础上添加了另一层地址(端口)2)、对数据传输过程中可能产生的错误进行了检测,并抛弃了已损坏的数据。
UDP套接字与TCP套接字的不同点:
1. UDP协议在使用前不需要进行连接。
2. UDP协议保存边界信息。
2.3.1 UDP客户端UDP客户端首先向被动等待联系的服务器发送一个数据报文。一个UDP报文要执行以下三步。
1. 创建一个DatagramSocket实例,可以选择对本地地址和端口号进行设置。
2. 使用DatagramSocket类的send() 和 receive()方法来发送和接收DatagramPacket实例,进行通信。
3. 通信完成后,使用DatagramSocket类的close()方法来销毁该套接字。
DatagramSocket创建的时候不需要指定目的地址。因为UDP通信前不需要进行连接。每个数据报可以发送到或者接收于不同的目的地址。
UDP协议的一个后果是会出现数据报文丢失。为了避免这个问题,可以设置最大阻塞时间。
下面一个UDP客户端的例子
1. 创建一个DatagramSocket实例,指定本地端口号,并可以选择指定本地地址。此时,服务器已经准备好从任何客户端接收数据报文。
2. 使用DatagramSocket类的receive()方法来接收一个DatagramPacket实例。当receive()方法返回时,数据报文就包含了客户端的地址,这样我们就知道了回复信息应该发送到什么地方。
3. 使用DatagramSocket类的send() 和receive()方法来发送和接收DatagramPackets实例,进行通信。
下面的例子是使用UDP将客户端发送过来的消息会发给客户端的。
在启用客户端发送数据
再查看服务器端