> 백엔드 개발 > Golang > Go의 로컬 컴퓨터에서 멀티캐스트 패킷 전송 및 수신을 활성화하려면 어떻게 해야 하나요?

Go의 로컬 컴퓨터에서 멀티캐스트 패킷 전송 및 수신을 활성화하려면 어떻게 해야 하나요?

Patricia Arquette
풀어 주다: 2024-11-15 12:05:03
원래의
840명이 탐색했습니다.

How can I enable multicast packet sending and receiving on the local machine in Go?

Go에서 멀티캐스트 UDP 연결을 위한 IP_MULTICAST_LOOP 설정

Windows에서 net.ListenMulticastUDP()를 사용하여 IP_MULTICAST_LOOP 플래그를 설정하는 것은 지원되지 않습니다. 오류 메시지에 언급되어 있습니다. 로컬 시스템에서 멀티캐스트 패킷 전송 및 수신을 활성화하려면 대체 방법이 필요합니다.

golang.org/x/net/ipv4 사용

golang.org/ x/net/ipv4 패키지는 보다 포괄적인 멀티캐스트 지원을 제공합니다. IP_MULTICAST_LOOP 플래그를 직접 조작할 수 있습니다.

  1. net.ListenUDP()를 사용하여 멀티캐스트 UDP 연결을 생성합니다.
  2. 연결을 ipv4.PacketConn으로 변환합니다.
  3. 다음을 사용하여 원하는 멀티캐스트 그룹에 가입하세요. JoinGroup().

MulticastLoopback 플래그

ipv4의 MulticastLoopback 기능은 IP_MULTICAST_LOOP 플래그의 현재 설정을 검색합니다. 루프백을 활성화하려면 SetMulticastLoopback(true)을 호출하세요.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿