UDP 用戶數據報協議,是一個簡單的面向數據報的運輸層協議。UDP不提供可靠性,它只是把應用程式傳給IP層的數據報發送出去,但是並不能保證它們能到達目的地 ,也不能保證數據包到達的順序。由於UDP在傳輸數據報前不用在客戶和伺服器之間建立一個連接,且沒有超時重發等機制,故而傳輸速度很快。 在Java中 ...
UDP---用戶數據報協議,是一個簡單的面向數據報的運輸層協議。UDP不提供可靠性,它只是把應用程式傳給IP層的數據報發送出去,但是並不能保證它們能到達目的地 ,也不能保證數據包到達的順序。由於UDP在傳輸數據報前不用在客戶和伺服器之間建立一個連接,且沒有超時重發等機制,故而傳輸速度很快。
在Java中UDP的實現:
* UDP:
* 客戶端:
* 1.創建用於UDP通信的socket對象---DatagramSocket(用於UDP數據的發送和接收)---數據報套接字
* 2.準備數據,封裝包----DatagramPacket(數據包)
* 3.發送數據,通過send方法
* 4.關閉套接字對象--socket對象
* 伺服器端: 接收數據
*
* 1.創建socket套接字對象,並綁定埠號
* 2.創建包對象,創建空數組,準備接收數據
* 3.接收數據
* 4.關閉資源
* UDP廣播方式:
* 同一網段所有主機都能接收,前提是埠要監聽
* 客戶端發送廣播,開啟埠監聽的服務端接收並列印消息
* 廣播的實現 :由客戶端發出廣播,伺服器端接收
* String host = "255.255.255.255";//廣播地址--代表所有主機
* 10.0.122.255----代表前三個網段是 10.0.122的所有主機
代碼實現:
客戶端(發送端):
1 import java.io.IOException; 2 import java.net.DatagramPacket; 3 import java.net.DatagramSocket; 4 import java.net.InetAddress; 5 import java.net.SocketException; 6 import java.net.UnknownHostException; 7 8 public class UDP_client { 9 public static void main(String[] args) throws IOException { 10 //1.創建對象 11 //構造數據報套接字並將其綁定到本地主機上任何可用的埠。 12 DatagramSocket socket = new DatagramSocket(); 13 //2.打包 14 byte[] arr = "客戶端:哈哈。。。。".getBytes(); 15 //四個參數: 包的數據 包的長度 主機對象 埠號 16 DatagramPacket packet = new DatagramPacket 17 (arr, arr.length,InetAddress.getByName("10.0.122.255") , 4000); 18 19 //3.發送 20 socket.send(packet); 21 22 //4.關閉資源 23 socket.close(); 24 } 25 26 }
伺服器端(接收端):
1 import java.io.IOException; 2 import java.net.DatagramPacket; 3 import java.net.DatagramSocket; 4 import java.net.SocketException; 5 import java.util.Arrays; 6 7 8 public class UDP_server { 9 public static void main(String[] args) throws IOException { 10 //1 11 DatagramSocket serverSocket = new DatagramSocket(4000); 12 //2 13 byte[] arr = new byte[1024]; 14 DatagramPacket packet = new DatagramPacket(arr, arr.length); 15 16 //3 當程式運行起來之後,receive方法會一直處於監聽狀態 17 serverSocket.receive(packet); 18 //從包中將數據取出 19 byte[] arr1 = packet.getData(); 20 System.out.println(new String(arr1)); 21 22 //4 23 serverSocket.close(); 24 } 25 }
結果:
前三個網段是 10.0.122的所有主機上的埠號為4000的伺服器端,只要開著,都可以接收到 ------- 客戶端:哈哈。。。。