實際上你在這里混淆了三種方法.第一個是bind,用于將套接字綁定到指定的地址和端口.使用此方法基本上您打開一個udp-port并等待該地址上的此端口的數據.第二個是join-method,用于讓套接字加入指定的多播組.組播組的示例是224.0.0.1 – “所有主機”組播組 – 其針對同一網段上的所有主機.第三種方法是joinGroup,它允許套接字在指定的網絡接口上加入指定的多播組.如您所見,方法二和三用于IP多播,方法一用于UDP(不一定與多播組合).通過加入多播組,套接字能夠接收使用IP多播發送的數據報.兩者當然可以組合在一起,例如使用多播接收數據,然后在必要時使用多播(如果數據對組中的所有主機感興趣)或直接發送給發送者(如果數據僅對發送者有意義) .
>使用bind方法將套接字綁定到地址時,這也涉及端口.除非套接字也加入多播組,否則只能接收該特定地址/端口組合的數據報.>我不確定你是如何從joinGroup到接口地址的.你需要的是一個SocketAddress和一個NetworkInterface. NetworkInterface可以通過接口名稱(NetworkInterface.getByName)或地址(NetworkInterface.getByInetAddress)檢索.在getByInetAddress的情況下,您可以將其稱為接口地址,但它所做的只是檢索具有指定地址的NetworkInterface,因此不使用端口號.>多播地址用于IP多播,用于將IP數據報發送到一組主機(如果他們有興趣接收數據報).您可以使用端口(如果使用UDP)但不需要. IPv4組播地址的CIDR為224.0.0.0/4(224.0.0.0 – 239.255.255.255),IPv6組播地址的前綴為ff00 :: / 8.這些范圍中的每個IP地址代表一個多播組.存在不同的多播地址塊(和多播組),這些塊將被不同地處理.例如,224.0.0.0 / 24不會從其原始子網路由,而239.192.0.0/14可以路由,如果全局路由必須封裝.