UDP (英语:User Datagram Protocol,用户数据报协议),位于 OSI 模型的传输层。一个无连接的协议。提供了应用程序之间要发送数据的数据报。由于UDP缺乏可靠性且属于无连接协议,所以应用程序通常必须容许一些丢失、错误或重复的数据包。
区别于TCP传输的可靠性,UDP编程在创建时,不指定数据接收方的ip 和端口,而是把这些连接信息放在了数据报中,其他数据处理,和TCP类似。诸位可以参考小编之前的两篇关于 TCP 通信传输的文章:Java — ServerSocket 和 Socket 简单通信 完整步骤 和 Java — ServerSocket 和 Socket 多线程通信 完整步骤
下面,小编演示一下UDP通信的完整步骤,Let go!
public class UdpTest {
//发送端
@Test
public void sender() throws IOException {
//1,创建upd数据报socket,报文接收端的Ip和端口,在数据包中定义,socket不关心
//这点区别于TCP传输方式
DatagramSocket socket = new DatagramSocket();
//2,创建数据包,数据内容,Ip 端口
//这里使用 127.0.0.1
InetAddress inetAddress = InetAddress.getLocalHost();
String str = "你好,我是发送端";
//转换为字节发送
byte[] bytes = str.getBytes();
DatagramPacket packet = new DatagramPacket(bytes,0,bytes.length,inetAddress,8081);
//3,启动upd发送
socket.send(packet);
//4,关闭socket资源
socket.close();
}
//接收端
@Test
public void receiver() throws IOException {
//1,创建Udp接收socket
DatagramSocket socket = new DatagramSocket(8081);
//2,创建接收字节数据区
byte[] bytes = new byte[1024];
//3,创建用于接收数据package包
DatagramPacket packet = new DatagramPacket(bytes,0,bytes.length);
//4,接收数据,写入packet里面
socket.receive(packet);
//5,打印传输的文件
System.out.println("接收端:" + new String(packet.getData(),0,packet.getLength()));
}
}
先启动 revicer(),等待接收数据。如果先启动 sender(),udp 机制会使得发送端启动运行后就会关闭,并不关心传输的数据是否到达接收端。
输出:
D:\jdk\jdk1.8.0_171\bin\java.exe
接收端:你好,我是发送端