Go のローカル マシンでマルチキャスト パケットの送受信を有効にするにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-15 12:05:03
オリジナル
771 人が閲覧しました

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 Flag

ipv4 の MulticastLoopback 関数は、IP_MULTICAST_LOOP フラグの現在の設定を取得します。ループバックを有効にするには、SetMulticastLoopback(true) を呼び出します。

Example

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート