Golang でマルチキャスト UDPConn に IP_MULTICAST_LOOP を設定する方法 (代替アプローチ)
ローカル マルチキャスト パケットを送受信するための IP_MULTICAST_LOOP の設定は Windows でサポートされています。ただし、Go net パッケージには便利な方法がありません。代替アプローチには、 golang.org/x/net/ipv4 パッケージの使用が含まれます。
技術的な詳細:
質問で述べた net.ListenMulticastUDP 関数、 IP_MULTICAST_LOOP を false に設定します。ただし、ipv4.NewPacketConn のソース コードは、IPv4 でこのオプションを設定および取得する方法を示しています。
import ( "golang.org/x/net/ipv4" ) // TestLoopback demonstrates setting and getting MulticastLoopback for IPv4 func TestLoopback(c *ipv4.PacketConn) error { // Get the current loopback setting loop, err := c.MulticastLoopback() if err != nil { return err } fmt.Printf("Current loopback status: %v\n", loop) // Set the loopback setting to true if err := c.SetMulticastLoopback(true); err != nil { return err } fmt.Printf("Loopback set to true\n") return nil }
実装例:
次の例は、golang の使用を示しています。 .org/x/net/ipv4 を使用して、マルチキャスト ポートでリッスンし、マルチキャスト グループに参加し、MulticastLoopback オプションを設定します。
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) // Join multicast group if err := pc.JoinGroup(iface, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 251)}); err != nil { fmt.Printf("JoinGroup error %v\n", err) return } // Set MulticastLoopback to true if err := TestLoopback(pc); err != nil { fmt.Printf("TestLoopback error %v\n", err) return } }
この例は、golang.org/x/net/ を使用する柔軟性を示しています。マルチキャスト UDP 接続の IP_MULTICAST_LOOP を設定および取得する機能など、高度なソケット操作用の ipv4。
以上がGolang でマルチキャスト UDP の IP_MULTICAST_LOOP を有効にする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。