Menyesuaikan Konfigurasi Multicast dalam Pakej Bersih Golang
Fungsi net.ListenMulticastUDP di Golang membolehkan pembangun mencipta sambungan UDP berbilang siaran. Walaupun ia menyediakan penyelesaian yang mudah untuk aplikasi mudah, ia mungkin tidak menawarkan fleksibiliti yang diperlukan untuk konfigurasi multicast lanjutan. Artikel ini bertujuan untuk menangani isu menetapkan pilihan IP_MULTICAST_LOOP pada sambungan UDP multicast dalam Windows, menawarkan penyelesaian menggunakan pakej golang.org/x/net/ipv4.
Fungsi net.ListenMulticastUDP secara automatik menetapkan IP_MULTICAST_LOOP pilihan kepada palsu. Untuk mengatasi tetapan ini dan membolehkan paket multicast diterima pada mesin tempatan, kami boleh menggunakan pakej ipv4.
Menggunakan golang.org/x/net/ipv4
Pakej ipv4 menyediakan kawalan lanjutan ke atas konfigurasi rangkaian, termasuk tetapan multicast. Menggunakan pakej ini, anda boleh:
Dapatkan dan tetapkan pilihan IP_MULTICAST_LOOP:
package main import ( "fmt" "golang.org/x/net/ipv4" ) func main() { pc := ipv4.NewPacketConn(conn) if loop, err := pc.MulticastLoopback(); err == nil { fmt.Printf("MulticastLoopback status:%v\n", loop) } }
Dayakan gelung balik multicast dengan menetapkan IP_MULTICAST_LOOP kepada benar:
if err := pc.SetMulticastLoopback(true); err != nil { fmt.Printf("SetMulticastLoopback error:%v\n", err) }
Contoh Pelaksanaan
Di bawah ialah contoh yang menunjukkan cara untuk menyediakan sambungan UDP berbilang siaran dengan pilihan IP_MULTICAST_LOOP didayakan menggunakan pakej ipv4:
package main import ( "fmt" "net" "golang.org/x/net/ipv4" ) func main() { ... iface, err := net.InterfaceByName("wlan") if err != nil { fmt.Printf("can't find specified interface %v\n", err) return } if err := pc.JoinGroup(iface, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 251)}); err != nil { return } // Set IP_MULTICAST_LOOP to true if err := pc.SetMulticastLoopback(true); err != nil { fmt.Printf("SetMulticastLoopback error:%v\n", err) return } ... }
Kod ini mula-mula menyertai kumpulan multicast dan kemudian menetapkan pilihan IP_MULTICAST_LOOP kepada benar, membenarkan paket multicast diterima pada mesin tempatan.
Atas ialah kandungan terperinci Bagaimana untuk Mendayakan Loopback Multicast dalam Sambungan UDP Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!