UDP(用户数据报协议)就像日常生活中的邮件投递,是不能保证可靠地寄到目的地。UDP是无连接的,对系统资源的要求较少,UDP可能丢包,也不保证数据顺序。但是对于网络游戏和在线视频等要求传输快,实时性高,质量可稍差一点的数据传输,UDP还是非常不错的。UDP是无连接协议,不需要像TCP一样监听端口,建立连接,然后才能进行通信。
java.net包中提供了两个类:DatagramSocket和DatagramPacket,用来支持UDP通信。
DatagramSocket用于在程序之间建立传送数据报的通信连接。
DatagramPacket用来表示数据报包,是数据传输的载体。DatagramPacket实现无连接数据包投递服务,每次投递数据包仅限根据该包中信息从一台机器路由到另一台机器。从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达,不保证包都能到达目的。
案例一:文件上传工具
服务端UploadServer代码如下:
package udp;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UploadServer {
public static void main(String[] args) {
System.out.println("服务器端运行...");
//创建一个子线程
Thread t=new Thread(()->{
try (
//创建DatagramSocket对象,指定本地主机端口8080。
//【作为服务器一般应明确指定绑定的端口】
DatagramSocket socket=new DatagramSocket(8080);
FileOutputStream fout=new FileOutputStream("TestDir/subDir/coco.jpg");
BufferedOutputStream out=new BufferedOutputStream(fout)
){
//准备一个缓冲区
byte[] buffer=new byte[1024];
//循环接收数据包
while(true)
{
//创建数据包对象,用来接收数据