--> 好像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協議則相反,所以如何應用要根據實際需求。