1、UDP协议概述
UDP是User Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的,每个被传输的数据报必须限定在64KB之内。
主要使用以下的两个类:
DatagramPacket:此类表示数据报包。
DatagramSocket:此类表示用来发送和接收数据报包的套接字
2、UDP服务器与客户端程序
服务器端:
String info = “….”
// 将信息封装成数据报
byte[] bytes = info.getBytes();
DatagramPacket dp = new DatagramPacket(bytes, 0, bytes
.length(), InetAddress.getByName(“localhost”), 5000);// 客户端在5000端口监听
DatagramSocket server = new DatagramSocket(3000);// 服务器的端口
server.send(dp);// 发送数据报
server.close();
import java.io.IOException; import java.net.*; public class UDPServer { public static void main(String[] args) { String info="good good 学习,天天UP"; byte[] bytes=info.getBytes(); try { //封装一个数据报包 /* buf - 数据包数据。 offset - 分组数据偏移量。 length - 分组数据长度。 address - 目的地址。 port - 目的端口号。 */ DatagramPacket dp=new DatagramPacket( bytes, 0, bytes.length, InetAddress.getByName("172.0.0.1"), 8000); //本程序的端口 DatagramSocket socket = new DatagramSocket(9000); socket.send(dp); } catch (UnknownHostException |SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
客户端:
byte b[] = new byte[1024];// 接收内容
DatagramPacket dp = new DatagramPacket(b, b.length);// 接收内容
// 客户端在5000端口等待
DatagramSocket client = new DatagramSocket(5000);
client.receive(dp); // 接收内容
System.out.println(new String(dp.getData(), 0, dp.getLength()));
client.close();
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class UDPClient { public static void main(String[] args) { byte[] bytes=new byte[1024];;// 接收内容 DatagramPacket dp=new DatagramPacket(bytes,bytes.length);// 接收内容 try { // 客户端在5000端口等待 DatagramSocket client=new DatagramSocket(8000); System.out.println("正在连接·····"); // 接收内容 client.receive(dp); String s= new String(dp.getData(),0,dp.getLength()); System.out.println(s); client.close(); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
先启动客户端,在启用服务器端,与TCP区别:
UDP是无连接的,减少了开销和发送数据之间的延时,不保证可靠,UDP的报长度要小于TCP的报头长度例如qq文件,PPLive等都可以使用UDP协议