首頁 > 後端開發 > 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() 標誌🎜>在Windows 中,不支援使用net.ListenMulticastUDP() 標記設定因為錯誤訊息中提到。要在本機電腦上啟用組播封包傳送和接收,需要替代方法。

使用 golang.org/x/net/ipv4

golang.org/ x/net/ipv4 軟體包提供了更全面的組播支援。它允許直接操作 IP_MULTICAST_LOOP 標誌:

  1. 使用 net.ListenUDP() 建立多播 UDP 連線。
  2. 將連線轉換為 ipv4.PacketConn。
  3. 使用加入所需的多播群組JoinGroup().

MulticastLoopback Flag

Mipv4 中的MulticastLback 標誌目前設定。若要啟用環回,請呼叫 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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板