解決辦法:
做以下3個修改
1. /etc/sysctl.conf 文件中的 net.ipv4.conf.all.rp_filter 設置成0
2. sysctl -w net.ipv4.conf.all.rp_filter=0
3. echo "0">/proc/sys/net/ipv4/conf/all/rp_filter
原理:
為了安全考慮,linux系統會根據rp_filter的值來對數據包進行檢查。
當rp_filter為1時,會對數據包的目的地址進行檢查,如果目的ip不是本機ip,則直接丟棄數據包。
因為組播數據包的目的地址是組播IP,肯定和本機ip不匹配,所以數據包會被丟棄。
當把rp_filter改為0時,不進行檢查,所有數據包都會收到,所以應用程序就可以收到組播消息了。