--> 好像UDP 协议没有TCP 协议应用得那么广泛
--> UdpSender 类定义一个发送端(快递公司)
package com.dragon.java.udpdatagram; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Scanner; public class UdpSender { public static void main(String[] args) throws IOException { Scanner scanner = new Scanner(System.in); // 创建一个DatagramSocket 快递公司 DatagramSocket socket = new DatagramSocket(10000); // 把信息打包 new DatagramPacket(发送的字节数组, 数组中要出去多少字节, 对方的ip地址, 对方的端口号); // 注意:数据报的长度不能超过 64K byte[] data = "你好".getBytes(); DatagramPacket dPackage = new DatagramPacket(data, data.length, InetAddress.getByName("192.168.10.79"), 20000); // xx.xx.xx.255-->广播ip String line = ""; while ((line = scanner.nextLine()) != null) { data = line.getBytes(); dPackage.setData(data); dPackage.setLength(data.length); // 发送包裹 socket.send(dPackage); } // socket.close(); } }
--> UDPReceiver 类定义一个接收端(收件人)
package com.dragon.java.udpdatagram; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /* * 收件人 */ public class UdpReceiver { public static void main(String[] args) throws IOException { // 绑定到指定的端口 DatagramSocket socket = new DatagramSocket(20000); // 创建一个空包裹,用来接收发来的数据报的数据报包 DatagramPacket p = new DatagramPacket(new byte[1024], 1024); while (true) { // 把收到的信息封装到DatagramPacket socket.receive(p); // 接收信息的阻塞式方法 InetAddress address = p.getAddress(); // 发送人 int port = p.getPort(); // 发送方的端口 byte[] data = p.getData(); // 存储发送过来的数据的字节数组 int length = p.getLength(); // 发送过来的信息的实际长度 System.out.println(address + " " + port + " " + new String(data, 0, length)); } // socket.close(); } }
--> UDP 协议和TCP 协议相比好处是快速的(因为它无需花时间去保证数据是否损坏,无需花时间确定接受方是否存在并等待响应)、无连接的、不可靠的数据报传输协议。而TCP协议则相反,所以如何应用要根据实际需求。