Java中UDP的廣播形式


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的服務器端,只要開着,都可以接收到 -------   客戶端:哈哈。。。。

 

 
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM