一、廣播數據包 1.特性 這種通信類似於廣播,要想實現這個功能,需要使用特殊的IP地址,要想實現多播或者廣播通信的主機必須加入一個D類地址,D類地址的十進位表示範圍為224.0.0.0~239.255.255.255 需要使用的類是`java.net.MulticastSocket. 常用的構建方法 ...
一、廣播數據包
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 = 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大數據學習視頻禮包