UDP协议

UDP协议

1.UDP使用场景

  1. 域名系统

    若是执行时间内,没有响应返回,证明包已丢失。

  2. 音频或视频

    数据包的丢失只会造成通话或视频的干扰和不清楚,而不会像TCP协议那样造成通话的丢失或卡顿。

2.UDP和TCP的类比

UDP类似于邮局,数据的接受与否和到达顺序,邮局是不可控的。但是可以通过数据报的数据,预先协商好协议,达到对数据顺序和数据完整性的控制。

TCP类似于电话,通话的应答和响应是可控的。

3.UDP的传输形式和TCP的对比

UDP是以数据包的形式,而TCP中是通过流的形式传输。

UDP客户端

1.创建客户端的步骤

1、首先打开一个Socket连接

//客户端使用随机端口
DatagramSocket socket = new DatagramSocket(0);

2、设置一个连接超时时间

//UDP是无连接的网络协议,不设置超时时间,即使远程主机未在端口监听,你也永远接收不到回音
socket.setTimeOut(10000);

3、建立数据包,一个发送数据包,一个接收数据包

//发送数据包
InetAddress host = InetAddress.getByName("www.baiud.com");
DatagramPacket request = new DatagramPacket(new byte[1],1,host,9999);

//接收数据包
Byte byte = new Byte[1024];
DatagramPacket response =  DatagramPacket(byte,byte.length);

socket.send(request);
socket.receive(response);

//注 java7中,DatagramSocket实现了AutoCloseablem,所以声明socket时,可以使用 try-with-resources
try(DatagramSocket socket = new DatagramSocket(0)){
    //连接到服务器
}catch(IOException ex){
    Sysstem.err.println("Could not connect to ......")
}

2.示例

UDP服务器

1.与TCP的不同

模式与客户端相同,不过在发送之前要先接收,而且不会选择要绑定的匿名接口。与TCP不同,并没有单独的DatagramServerSocket类

2.创建注意事项

1、创建一个接收数据的请求包

DatagramPacket request = new DatagramPacket(new byte[1024],0,1024);
//这个调用会无限阻塞
scoket.receive(request);

2、创建一个响应包

//响应包的声明规范对于服务器属性是关联的,此处的响应包需要指明响应的地址和端口
DatagramPacket response = new DatagramPacket(new byte[1],1,host,9999);

3.示例

DatagramPacket类

1、组成

UDP数据包是基于IP数据报建立的,只向其底层IP数据报添加了很少的一点内容。

向IP数据报首部添加了8字节。

UDP首部包括源和目标端口号、IP首部之后所有内容的长度,以及一个可选的校验和。

端口号以2字节无符号整数给出,主机有65536个不同的UDP端口号可以使用,与每台主机的65536个不同的TCP端口截然不同。

因此,数据包中的字节数不能超过65536减去首部的8个字节。

校验和字段是可选的,应用层程序不适用这个校验和,如果数据的校验和失败,那么底层网络软件会丢弃这个数据报,发送方和接收方都不会收到通知。毕竟,UDP是不可靠的协议。

816350-20151024000208442-1929974276

2、UDP数据报长度

1、理论最大值

65507字节

2、实际限制

8192字节 8KB

3、为保证最大的安全性

512字节或更少

注意 TCP

TCP数据报也存在这个问题,但Socket和ServerScoket提供的是基于流的API,因此对程序员隐藏了这些细节。

3、DatagramPacket 类

只提供了获取和设置IP首部中源或目标地址、获取和设置源或目标端口、获取和设置数据、以及获取和设置数据长度。其余首部字段无法通过java代码访问。

1、构造函数

1、接收数据报的构造函数

2、发送数据报的构造函数

2、get方法

3、set方法

DatagramSocket 类

1、构造函数

2、发送和接收数据报

原文地址:https://www.cnblogs.com/nangonghui/p/12020082.html