Java UDP組播的總結

2021-07-29 13:15:02 字數 1366 閱讀 1150

備註:本文客戶端 指訊息的傳送方,服務端 指訊息的接收方

1、客戶端傳送也可以使用  datagramsocket 類,但對於組播需要指定 settimetolive(ttl),使用datagramsocket  作為傳送方是怎麼處理的 ,不太確定

2、客戶端使用 

multicastsocket 類時可以不加入廣播組

3、客戶端向組播的虛擬ip和port-a 傳送資料時,服務端必須監聽這個port-a才能收到資料,在服務端側,這個port 並不是虛擬ip的port ,而是服務端本地的port ,所以這個port 在服務端並不能多次被繫結。從結果上來講 可以理解為 客戶端向虛擬ip的主機的port-a傳送訊息後,虛擬ip主機會向加入這個組的所有機器的port-a 埠傳送訊息,所以可以理解為 組播中 組 是虛擬ip+port來標識乙個組(但組的port 和服務端監聽的port 必須一致)

4、組播各個機器不互通的解決方法

由於單播是指定傳送目的的ip和埠,所有只要能ping通對方的ip就能將單播的udp報文傳送過去。

但是對於組播,由於加入和傳送的目的是d類位址,所以得保證各個機器之間是同乙個網段 解決辦法:

1)禁止其他網絡卡,只保留一塊網絡卡

2)修改ip和閘道器,確認在同一網段(在只有一塊兒網絡卡的前提下 才確定有效)

3) 服務端有多塊網絡卡的情況:繫結位址時 加上 指定網絡卡的ip+port(可以使用inetsocketaddress 類

multicastsocket datagramsocket =newmulticastsocket(newinetsocketaddress("192.168.1.106",56544)); 表示 監聽ip為192.168.1.106這個網絡卡的56544埠

客戶端有多塊網絡卡的情況:繫結位址時 加上 指定網絡卡的ip+port

multicastsocket datagramsocket =newmulticastsocket(newinetsocketaddress("192.168.1.106",56544)); 表示 使用ip為192.168.1.106這個網絡卡的56544埠 作為傳送方的資訊,

傳送時 再指定接收組的 虛擬ip和埠

datagrampacket datagrampacket =newdatagrampacket(bytes,0,bytes.length,inetaddress.getbyname("226.7.8.9"),10022);

組播概念總結

一 概念 1 什麼是組播?組播是一種資料報傳輸方式,當有多台主機同時成為乙個資料報的接受者時,出於對頻寬和cpu負擔的考慮,組播成為了一種最佳選擇。2 組播如何進行工作?組播通過把224.0.0.0 239.255.255.255的d類位址作為目的位址,有一台源主機發出目的位址是以上範圍組播位址的報...

IP組播與組播協議

在internet上,多 業務諸如 圖1.1 1.ip組播 ip組播是指乙個ip報文向乙個 主機組 的傳送,這個包含零個或多個主機的主機組由乙個單獨的 ip位址標識。主機組位址也稱為 組播位址 或者d類位址。除了目的位址部分,組播報文與普通報文沒有區別,網路盡力傳送組播報文但是並不保證一定送達。主機...

組播位址,IP組播位址

ip組播位址 組播協議的位址在 ip協議中屬於 d類位址。d類位址是從 224.0.0.0 到239.255.255.255 之間的ip 位址其中 224.0.0.0 到224.0.0.255 是被保留的位址。組播協議的位址範圍類似於一般的單播位址,被劃分為兩個大的位址範圍,239.0.0.0 23...