ホームページ > バックエンド開発 > Golang > Go 言語のネットワーク プログラミング関数を使用して UDP ブロードキャスト通信を実装するにはどうすればよいですか?

Go 言語のネットワーク プログラミング関数を使用して UDP ブロードキャスト通信を実装するにはどうすればよいですか?

WBOY
リリース: 2023-07-30 13:24:22
オリジナル
1530 人が閲覧しました

Go 言語のネットワーク プログラミング関数を使用して UDP ブロードキャスト通信を実装するにはどうすればよいですか?

ネットワーク通信では、UDP ブロードキャストを使用して、1 対 1 接続を必要とせずに、同じネットワーク上のすべてのデバイスにメッセージを送信できます。 Go言語では、ネットワークプログラミング関数を使用してUDPブロードキャスト通信を実装できます。この記事では、Go 言語のネットワーク プログラミング関数を使用して UDP ブロードキャスト通信を実装する方法と、対応するコード例を紹介します。

まず、net および fmt パッケージをインポートする必要があります。net パッケージは、ネットワーク プログラミングの基本機能を提供します。 fmt パッケージは、フォーマットされた出力に使用されます。

import (
    "net"
    "fmt"
)
ログイン後にコピー

次に、UDP ソケットを作成し、指定された IP アドレスとポートにバインドする必要があります。

net.ResolveUDPAddr 関数を使用してアドレス解決を実行し、net.ListenUDP 関数を使用して UDP ソケットを作成できます。

func main() {
    // 解析地址
    addr, err := net.ResolveUDPAddr("udp", "127.0.0.1:8080")
    if err != nil {
        fmt.Println("地址解析失败:", err)
        return
    }

    // 创建Socket
    conn, err := net.ListenUDP("udp", addr)
    if err != nil {
        fmt.Println("创建UDP Socket失败:", err)
        return
    }

    defer conn.Close()
}
ログイン後にコピー

UDP ソケットを作成した後、

conn.WriteToUDP 関数を使用して、指定された IP アドレスとポートに UDP データを送信できます。

func main() {
    // ...

    n, err := conn.WriteToUDP([]byte("Hello, World!"), addr)
    if err != nil {
        fmt.Println("发送UDP数据失败:", err)
        return
    }

    fmt.Println("发送了", n, "字节的数据")
}
ログイン後にコピー

次に、UDP ソケットでのメッセージの受信を監視する必要があります。

conn.ReadFromUDP 関数を使用して、UDP ソケットからデータを読み取り、送信者の IP アドレスとポートを取得できます。

func main() {
    // ...

    buffer := make([]byte, 1024)
    n, remoteAddr, err := conn.ReadFromUDP(buffer)
    if err != nil {
        fmt.Println("接收UDP数据失败:", err)
        return
    }

    fmt.Println("接收到来自", remoteAddr, "的UDP数据:", string(buffer[:n]))
}
ログイン後にコピー

最後に、

conn.SetBroadcast 関数を使用して UDP ソケットをブロードキャスト モードに設定し、conn.WriteToUDP 関数を使用してブロードキャスト メッセージを送信できます。

func main() {
    // ...

    // 设置为广播模式
    err = conn.SetBroadcast(true)
    if err != nil {
        fmt.Println("设置广播模式失败:", err)
        return
    }

    // 广播消息
    broadcastAddr := &net.UDPAddr{IP: net.IPv4(255, 255, 255, 255), Port: 8080}
    n, err = conn.WriteToUDP([]byte("Broadcast Message"), broadcastAddr)
    if err != nil {
        fmt.Println("发送广播消息失败:", err)
        return
    }

    fmt.Println("发送了", n, "字节的广播消息")
}
ログイン後にコピー

完全なコード例は次のとおりです。

package main

import (
    "net"
    "fmt"
)

func main() {
    addr, err := net.ResolveUDPAddr("udp", "127.0.0.1:8080")
    if err != nil {
        fmt.Println("地址解析失败:", err)
        return
    }

    conn, err := net.ListenUDP("udp", addr)
    if err != nil {
        fmt.Println("创建UDP Socket失败:", err)
        return
    }

    defer conn.Close()

    n, err := conn.WriteToUDP([]byte("Hello, World!"), addr)
    if err != nil {
        fmt.Println("发送UDP数据失败:", err)
        return
    }

    fmt.Println("发送了", n, "字节的数据")

    buffer := make([]byte, 1024)
    n, remoteAddr, err := conn.ReadFromUDP(buffer)
    if err != nil {
        fmt.Println("接收UDP数据失败:", err)
        return
    }

    fmt.Println("接收到来自", remoteAddr, "的UDP数据:", string(buffer[:n]))

    err = conn.SetBroadcast(true)
    if err != nil {
        fmt.Println("设置广播模式失败:", err)
        return
    }

    broadcastAddr := &net.UDPAddr{IP: net.IPv4(255, 255, 255, 255), Port: 8080}
    n, err = conn.WriteToUDP([]byte("Broadcast Message"), broadcastAddr)
    if err != nil {
        fmt.Println("发送广播消息失败:", err)
        return
    }

    fmt.Println("发送了", n, "字节的广播消息")
}
ログイン後にコピー

上記のコード例を通じて、Go 言語のネットワーク プログラミング関数を使用して UDP ブロードキャスト通信を実装できます。実際のニーズに応じて変更および拡張して、より複雑なネットワーク通信機能を実現できます。

以上がGo 言語のネットワーク プログラミング関数を使用して UDP ブロードキャスト通信を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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