Golang의 멀티캐스트 UDP 연결에서 IP_MULTICAST_LOOP 활성화
멀티캐스트 UDP 연결에서 IP_MULTICAST_LOOP를 활성화하려면 net.ListenMulticastUDP 기능을 사용할 수 있지만 한계 포함:
golang.org/x/를 사용하는 솔루션 net/ipv4
유연성을 높이려면 golang.org/x/net/ipv4 사용을 고려해보세요:
예제 코드:
package main import ( "fmt" "net" "golang.org/x/net/ipv4" ) func main() { // IPv4 address for multicast ipv4Addr := &net.UDPAddr{IP: net.IPv4(224, 0, 0, 251), Port: 5352} // Dial a UDP connection conn, err := net.ListenUDP("udp4", ipv4Addr) if err != nil { fmt.Printf("Error dialing: %v\n", err) return } // Create a packet connection from the UDP connection pc := ipv4.NewPacketConn(conn) // Assume an interface named "wlan" iface, err := net.InterfaceByName("wlan") if err != nil { fmt.Printf("Could not find interface %v\n", err) return } // Join the multicast group on the specified interface if err = pc.JoinGroup(iface, &net.UDPAddr{IP: net.IPv4(224, 0, 0, 251)}); err != nil { fmt.Printf("Failed to join multicast group: %v\n", err) return } // Get and set multicast loopback status loop, err := pc.MulticastLoopback() if err != nil { fmt.Printf("Failed to get multicast loopback status: %v\n", err) } fmt.Printf("Multicast loopback status: %v\n", loop) if !loop { if err = pc.SetMulticastLoopback(true); err != nil { fmt.Printf("Could not set multicast loopback: %v\n", err) return } } // Send a message on the multicast address if _, err = conn.WriteTo([]byte("hello"), ipv4Addr); err != nil { fmt.Printf("Error sending multicast message: %v\n", err) } // Reading multicast messages buf := make([]byte, 1024) for { n, addr, err := conn.ReadFrom(buf) if err != nil { fmt.Printf("Error in multicast message reception: %v\n", err) } fmt.Printf("Message received: %s from %v\n", buf[:n], addr) } }
다음 단계를 따르면 IP_MULTICAST_LOOP 및 로컬 컴퓨터에서 멀티캐스트 패킷을 보내고 받습니다.
위 내용은 Golang의 멀티캐스트 UDP 연결에서 IP_MULTICAST_LOOP를 설정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!