一、廣播資料包
1.特性
- 這種通信類似于廣播,要想實作這個功能,需要使用特殊的IP地址,要想實作多播或者廣播通信的主機必須加入一個D類地址,D類地址的十進制表示范圍為224.0.0.0~239.255.255.255
- 需要使用的類是`java.net.MulticastSocket.
- 常用的構建方法
(1)MulticastSocket(int port) throws IOException
創建一個多播套接字,并將其系結到埠上,
(2)MuticastSocket(SocketAddress bindaddr) throws IOException
創建一個多播套接字,并將其系結到一個指定套接字地址上,\ - 常用的成員方法:
(1)public void joinGroup(InetAddress mcastaddr)
將多播套接字加入指定多播組,
(2)public void leaveGroup(InetAddress mcastaddr)
將多播套接字移出多播組,
(3)public void setTimeToLive(int ttl) throws IOException
設定在此MuticastSocket上發出的多播資料包的默認生存時間,\ - ttl引數設定資料包最多可以跨過多少個網路:
(1)ttl=0,資料包應該停留在本地主機;
(2)ttl=1,資料包應該發送到本地局域網;
(3)ttl=32,資料包應該發送到本站點的網路上;
(4)ttl=64,資料包應該保留在本地區;
(5)ttl=128,資料包應該保留在本大洲;
(6)ttl=255,資料包應該可以發送到所有地方,\ - 先寫一個發送端
package com.bjpowernode.java_learning; import java.io.IOException; import java.net.DatagramPacket; import java.net.InetAddress; import java.net.MulticastSocket; public class D129_1_BroadcastTest { public static void main(String[] args) { new D129_Broadcast().send(); } } class D129_Broadcast { public void send() { String msg = "Hello,This is Broadcast Message"; //多播內容 int port = 6666; InetAddress group = null; MulticastSocket ms = null; try { group = InetAddress.getByName("224.1.1.1"); //創建多播地址 ms = new MulticastSocket(port); //創建多播套接字 ms.joinGroup(group); //將套接字加入多播地址 ms.setTimeToLive(1); //設定資料報發送范圍為本地 DatagramPacket dp = new DatagramPacket(msg.getBytes(),msg.length(),group,port);//創建待發送的資料報 ms.send(dp); //發送資料報 }catch(IOException e) { System.out.println(e); }finally { ms.close(); //關閉套接字 } } }
- 再寫一個接收端的程式
package com.bjpowernode.java_learning; import java.net.DatagramPacket; public class D129_2_ReceiverTest { public static void main(String[] args) { new D129Receiver().receive(); } } class D129Receiver{ public void receive() { byte[] data = https://www.cnblogs.com/ruigege0000/p/new byte[1024]; //資料快取區 int port = 6666; //多播埠號 InetAddress group = null; MuticastSocket ms = null; try { group = InetAddress.getName("224.1.1.1"); //創建多播地址 ms = new MulticastSocket(port); //創建多播套接字 ms.joinGroup(group); //將套接字加入到多播地址 DatagramPacket dp = new DatagramPacket(data,data,length,group,port); //創建待接收的資料報 ms.receive(dp); //接收資料報 String msg = new String(dp.getData(),0,dp.getLength()); System.out.println("接收到的資料廣播資料為:"+msg); }catch(IOException e) { System.out.println(e); }finally { ms.close(); //關閉套接字 } } }
- 首先是運行接收端,然后運行廣播端,廣播將發送“Hello,This is Broadcast Message",客戶端收到該訊息后會將其列印出來,

總結:
(1)TCP和UDP之間的區別有哪些? TCP是面向連接的流傳輸控制協議,具有高可靠性,確保傳輸資料的正確性,有驗證重發機制,保證傳輸過去的資料不會出現丟失或者亂序的情況,
UDP是無連接的資料服務,不對資料的完整性進行檢查與修改,無需等待對方應答,會出現分組丟失,重復,亂序的情況,但傳輸效率高,實時性很好,適用于局域網內部傳輸,報文協議頭簡單,
(2)Socket的網路編程程序簡述
首先是客戶端,首先創建一個Socket實體,利用構造方法,系結要通信的地址和埠,然后通過套接字的I/O流進行通信,最后通信接收,呼叫成員方法close()來關閉Socket;
然后是服務器端,首先建立一個ServerSocket實體,并使用構造方法來系結本地IP地址以及埠號,用于監聽將會收到的TCP請求,然后做如下回圈:呼叫成員方法accept()來獲取客戶端的連接,并且回傳一個Socekt實體,為回傳的Socket實體創建一個執行緒,并且使用回傳的Socket實力的I\O流與客戶端通信;最后使用成員方法進行關閉,
三、原始碼:
- D129_1_BroadcastTest.java
- D129_2_ReceiverTest.java
- https://github.com/ruigege66/Java/blob/master/D129_1_BroadcastTest.java
- https://github.com/ruigege66/Java/blob/master/D129_2_ReceiverTest.java
- CSDN:https://blog.csdn.net/weixin_44630050
- 博客園:https://www.cnblogs.com/ruigege0000/
- 歡迎關注微信公眾號:傅里葉變換,個人賬號,僅用于技術交流,后臺回復“禮包”獲取Java大資料學習視頻禮包

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/144543.html
標籤:Java
上一篇:SpringBoot2 整合JTA組件,多資料源事務管理
下一篇:小伙子,你懂執行緒池的創建嗎?
