UDP廣播與多播
作者:legend
使用UDP協議進行信息的傳輸之前不需要建議連接。換句話說就是客戶端向服務器發送信息,客戶端只需要給出服務器的ip地址和端口號,然后將信息封裝到一個待發送的報文中並且發送出去。至於服務器端是否存在,或者能否收到該報文,客戶端根本不用管。
通常我們討論的udp的程序都是一對一的單播程序。本章將討論一對多的服務:廣播(broadcast)、多播(multicast)。對於廣播,網絡中的所有主機都會接收一份數據副本。對於多播,消息只是發送到一個多播地址,網絡知識將數據分發給哪些表示想要接收發送到該多播地址的數據的主機。總得來說,只有UDP套接字允許廣播或多播。
UDP廣播
廣播UDP與單播UDP的區別就是IP地址不同,廣播使用廣播地址255.255.255.255,將消息發送到在同一廣播網絡上的每個主機。值得強調的是:本地廣播信息是不會被路由器轉發。當然這是十分容易理解的,因為如果路由器轉發了廣播信息,那么勢必會引起網絡癱瘓。這也是為什么IP協議的設計者故意沒有定義互聯網范圍的廣播機制。
廣播地址通常用於在網絡游戲中處於同一本地網絡的玩家之間交流狀態信息等。廣播就不在寫演示程序了,讀者可以將ECHO程序的ip地址改為廣播地址即可。
其實廣播顧名思義,就是想局域網內所有的人說話,但是廣播還是要指明接收者的端口號的,因為不可能接受者的所有端口都來收聽廣播。
UDP多播
同樣的UDP多播也要指明接受者的端口號,而且與廣播相似的是多播與單播之間的區別還在於地址。ipv4中的多播地址范圍是:224.0.0.0到239.255.255.255。在JAVA中,多播一樣十分好實現,要實現多播,就要用到MulticastSocket類,其實該類就是DatagramSocket的子類,在使用時除了多播自己的一些特性外,把它當做DatagramSocket類使用就可以了。下面將給出一個簡單的多播接受數據的例子:
接下來實現多播發送方的代碼:在多播中設置了TTl值(Time to live),每一個ip數據報文中都包含一個TTL,每當有路由器轉發該報文時,TTL減1,知道減為0時,生命周期結束,報文即時沒有到達目的地,也立即宣布死亡。當然在Java中,ttl並不是十分准確的,曾經在一本書中介紹過報文的傳播距離是不會超過ttl所設置的值的。