多播 - 請注意您的作業系統、發行版本或網路上的 IPV6 與 IPV4 支援
常見問題 > 錯誤 > 多播 - 請注意您的作業系統、發行版本或網路上的 IPV6 與 IPV4 支援
您可能會想知道為什麼在多播期間根本沒有收到任何訊息,也許您已經嘗試了一切,甚至在其他作業系統或發行版本和 JDK 上也嘗試過,並且發現它在某些地方可以運作,而在其他地方卻不行……您可能嘗試了一個小型 C 程式來執行相同的操作……而且運作良好……您感到壓力山大……您應用程式在 *此* 作業系統/發行版本上可能出了什麼問題……
預設情況下,在 Linux 平台上,如果您的核心已啟用 IPV6 支援,則 Java 執行時 (自 1.4 版本起) 將使用 IPV6 套接字進行通訊。這沒什麼問題,只是您的網路可能未針對 IPV6 進行配置。因此,所有內容都會被丟棄……而且消費者端永遠不會收到任何內容(甚至可能不支持 IPV6)。
這個問題有一個解決方案:強制 Java 執行時使用 IPV4 堆疊。這可以使用系統屬性來完成
-Djava.net.preferIPv4Stack=true
網路 IPv6 使用者指南
此資訊以及更多詳細資訊可在 Java 文件 網路 IPv6 使用者指南 和 網路屬性 中找到
或者,您可以透過在 /etc/modprobe.conf 的末尾新增以下行來停用 Linux 機器上的 IPV6 支援 (顧名思義,net-pf-10 是 IPV6 網路模組)
alias net-pf-10 off # disable IPV6
如果您有非常博學的系統管理員,他們習慣於這些問題(例如在電視或廣播公司中,他們大量使用多播),他們可以立即告訴您網路上是否支援 IPV6(或者他們也可以告訴您是否支援多播以及您可以使用哪個位址/埠進行多播),這是一個優勢,將對您有極大的幫助。
在某些更常見的情況下,您的系統管理員會像您一樣不知所措,因為他們不經常處理這些問題。所以祝你好運找到問題。您需要採取非常嚴格的方法來消除不確定性。為此,您至少需要一個類似 ethereal 的工具(適用於 Unix、Linux 和 Windows)。