Personnalisation de la configuration de multidiffusion dans le package Net de Golang
La fonction net.ListenMulticastUDP de Golang permet aux développeurs de créer des connexions UDP de multidiffusion. Bien qu'il constitue une solution pratique pour les applications simples, il peut ne pas offrir la flexibilité requise pour les configurations de multidiffusion avancées. Cet article vise à résoudre le problème de la configuration de l'option IP_MULTICAST_LOOP sur les connexions UDP multicast sous Windows, en proposant une solution de contournement à l'aide du package golang.org/x/net/ipv4.
La fonction net.ListenMulticastUDP définit automatiquement IP_MULTICAST_LOOP option sur false. Pour remplacer ce paramètre et permettre la réception des paquets de multidiffusion sur la machine locale, nous pouvons utiliser le package ipv4.
Utilisation de golang.org/x/net/ipv4
Le package ipv4 offre un contrôle avancé sur les configurations réseau, y compris les paramètres de multidiffusion. À l'aide de ce package, vous pouvez :
Obtenir et définir l'option 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) } }
Activer le bouclage de multidiffusion en définissant IP_MULTICAST_LOOP sur true :
if err := pc.SetMulticastLoopback(true); err != nil { fmt.Printf("SetMulticastLoopback error:%v\n", err) }
Exemple de mise en œuvre
Vous trouverez ci-dessous un exemple qui montre comment configurer une connexion UDP multicast avec l'option IP_MULTICAST_LOOP activée en utilisant le package 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 } ... }
Ce code rejoint d'abord un groupe de multidiffusion et définit ensuite l'option IP_MULTICAST_LOOP sur true, permettant aux paquets de multidiffusion d'être reçus sur la machine locale.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!