视频投票网站怎么做,高端品牌网站建设兴田德润实惠,网站建设有什么品牌,由担路网提供网站建设一、UDP协议简介#xff08;User Datagram Protocol#xff0c;用户数据报协议#xff09;
UDP是传输层的协议#xff0c;该协议主要为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法#xff0c;功能即为在IP的数据报服务之上增加了最基本的服务#…一、UDP协议简介User Datagram Protocol用户数据报协议
UDP是传输层的协议该协议主要为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法功能即为在IP的数据报服务之上增加了最基本的服务复用和分用以及差错检测。
二、UDP的主要特点
1. UDP是无连接的
即发送数据之前不需要建立连接当然发送数据结束时也没有连接可释放因此减少了开销和发送数据之前的时延。
2. UDP使用尽最大努力交付
即不保证可靠交付因此主机不需要维持复杂的连接状态表这里边有许多参数。
3. UDP是面向报文的
发送方的UDP对应用程序交下来的报文在添加首部后就向下交付IP层。UDP对应用层交下来的报文既不合并也不拆分而是保留这些报文的边界。
4. UDP没有拥塞控制
因此网络出现的拥塞不会使源主机的发送速率降低。
5. UDP支持一对一、一对多、多对一和多对多的交互通信
6. UDP的首部开销小
只有8个字节比TCP的20个字节的首部要短。
三、DatagramSocket类 DatagramSocket 类用于表示发送和接收数据报包的套接字。数据报包套接字是包投递服务的发送或接收点。每个在数据报包套接字上发送或接收的包都是单独编址和路由的。从一台机器发送到另一台机器的多个包可能选择不同的路由也可能按不同的顺序到达。 1. 构造方法
1DatagramSocket() 表示创建一个默认的套接字并绑定到本地地址和一个随机的端口号
2DatagramSocket(int port) 表示创建一个默认的套接字并绑定到本地地址和特定的端口号
3DatagramSocket(int port, InetAddress iad) 表示创建一个套接字绑定到特定的端口号及指定地址
4DatagramSocket(SocketAddress sad) 表示创建一个套接字绑定到特定的套接字地址
2. 基本方法
1close() 关闭套接字
2recevie(DatagramPacket dp) 接受数据报
3send(DatagramPacket dp) 发送数据报
四、DatagramPacket类 java.net 包中的 DatagramPacket 类用来表示数据报包数据报包用来实现无连接包投递服务。每条报文仅根据该包中包含的信息从一台机器路由到另一台机器。从一台机器发送到另一台机器的多个包可能选择不同的路由也可能按不同的顺序到达。 1. 接受类型
1DatagramPacket(byte[] buf, int length) 用来接受长度为length的buf数据(即数据存于字节数组buf中)
2. 发送类型
1DatagramPacket(byte[] buf, int length, InetAddress address, int port) 将length长的buf数据发送到指定的地址的端口号处
2DatagramPacket(byte[] buf, int length, SocketAddress address) 将length长的buf数据发送到指定的套接字地址处
五、代码实例
先运行接收方再运行发送方。 SendMessage信息发送端
public class SendMessage {public static void main(String[] args) {try {// 1.建立套接字DatagramSocket ds new DatagramSocket();// 2.创建信息并且打包String info 原神启动;// 信息装包 信息内容 信息长度 ip/域名 10086DatagramPacket dp new DatagramPacket(info.getBytes(),info.getBytes().length,InetAddress.getByName(127.0.0.1),10086);ds.send(dp); // 使用datagramSocket对象将DatagramPacket对象发送出去ds.close(); // 关闭} catch (SocketException e) {throw new RuntimeException(e);} catch (UnknownHostException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}}
}Recv信息接收端
public class Recv {public static void main(String[] args) {try {// 1.套接字DatagramSocket ds new DatagramSocket(10086);// 2. 创包byte[] bytes new byte[1024];DatagramPacket dp new DatagramPacket(bytes, bytes.length);// 3.将接受的信息写到包里面ds.receive(dp);System.out.println(dp);for (byte b : bytes) {System.out.println(b);}System.out.println(dp.getData());// 4.关闭ds.close();} catch (SocketException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}}
}