Go でのマルチキャスト UDP 接続の IP_MULTICAST_LOOP の設定
Windows では、net.ListenMulticastUDP() を使用して IP_MULTICAST_LOOP フラグを設定することはサポートされていません。エラーメッセージに記載されています。ローカル マシンでマルチキャスト パケットの送受信を有効にするには、別の方法が必要です。
golang.org/x/net/ipv4 を使用する
golang.org/ x/net/ipv4 パッケージは、より包括的なマルチキャスト サポートを提供します。 IP_MULTICAST_LOOP フラグの直接操作が可能になります。
MulticastLoopback Flag
ipv4 の MulticastLoopback 関数は、IP_MULTICAST_LOOP フラグの現在の設定を取得します。ループバックを有効にするには、SetMulticastLoopback(true) を呼び出します。
Example
package main import ( "fmt" "net" "golang.org/x/net/ipv4" ) func main() { ipv4Addr := &net.UDPAddr{IP: net.IPv4(224, 0, 0, 251), Port: 5352} conn, err := net.ListenUDP("udp4", ipv4Addr) if err != nil { fmt.Printf("ListenUDP error %v\n", err) return } pc := ipv4.NewPacketConn(conn) // Assume a network interface named "wlan" 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 } // Enable multicast loopback if err := pc.SetMulticastLoopback(true); err != nil { fmt.Printf("Error setting multicast loopback: %v\n", err) } }
以上がGo のローカル マシンでマルチキャスト パケットの送受信を有効にするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。