ホームページ  >  記事  >  バックエンド開発  >  Go で UDP を使用してプログラミングするにはどうすればよいですか?

Go で UDP を使用してプログラミングするにはどうすればよいですか?

王林
王林オリジナル
2023-05-11 17:07:361868ブラウズ

UDP (User Datagram Protocol) はコネクションレス型のプロトコルであり、トランスポート層で非常に重要なプロトコルです。接続を確立せずにターゲット ホストにデータを直接送信できるため、リアルタイム データ送信、ゲーム、その他のアプリケーションで広く使用されており、一部のシナリオでは TCP よりも適しています。

Go 言語では UDP プログラミングも非常に簡単なので、この記事では Go 言語で UDP プログラミングを行う方法を紹介します。

  1. UDP プロトコルのデータグラムを理解する

UDP プロトコルでは、データはデータグラムとも呼ばれる UDP パケットにカプセル化されます。データグラムには、送信元ポート番号、宛先ポート番号、長さ、チェックサム、その他の情報が含まれます。

Go 言語では、ネット パッケージの UDPConn を使用して UDP データグラムを読み書きできます。

  1. UDP サーバー プログラムの作成

UDP サーバー プログラムでは、最初に UDP アドレスを作成する必要があります、つまり、ネット パッケージの ResolveUDPAddr メソッドを使用します。このメソッドは、プロトコル タイプとサーバー アドレスという 2 つのパラメータを受け取ります。

次に、ネット パッケージの ListenUDP メソッドを使用してアドレスをリッスンします。このメソッドは、UDP データグラムの送受信に使用できる UDPConn オブジェクトを返します。

次のステップは、データグラムを読み取るプロセスです。UDPConn オブジェクトの ReadFromUDP メソッドを使用して、クライアントから送信されたデータグラムを読み取ります。このメソッドは、データグラムが受信されるまでブロックされ、エラー オブジェクトとデータグラムが返されます。物体。 。データを読み込んだ後は、データを取り出して、データのハッシュ値を計算するなどの加工を行うことができます。次に、UDPConn オブジェクトの WriteToUDP メソッドを使用して、応答データグラムをクライアントに送信します。

次は、単純な UDP サーバー プログラムです:

package main

import (
    "fmt"
    "net"
)

func main() {
    ip := net.ParseIP("127.0.0.1")
    addr := &net.UDPAddr{
        IP:   ip,
        Port: 8080,
    }

    conn, err := net.ListenUDP("udp", addr)
    if err != nil {
        fmt.Println(err)
        return
    }

    defer conn.Close()
    fmt.Println("UDP server listening on port ", addr.Port)
    for {
        data := make([]byte, 1024)
        n, addr, err := conn.ReadFromUDP(data)
        if err != nil {
            fmt.Println("Error: ", err)
            continue
        }
        fmt.Printf("Received from %s:%d : %s
", addr.IP.String(), addr.Port, string(data[:n]))

        reply := []byte("Hello from UDP server")
        conn.WriteToUDP(reply, addr)
    }
}
  1. UDP クライアント プログラムの作成

UDP クライアント プログラムでは、最初に A を作成する必要があります。 UDP アドレス、つまり、ネット パッケージの ResolveUDPAddr メソッドを使用します。このメソッドは、プロトコル タイプとサーバー アドレスという 2 つのパラメータを受け取ります。

次に、DialUDP メソッドを使用してサーバー アドレスに接続します。このメソッドは、UDP データグラムをサーバーに送信するために使用できる UDPConn オブジェクトを返します。

次のステップは、データグラムをサーバーに送信することです。UDPConn オブジェクトの Write メソッドを使用して、データグラムをサーバーに送信します。このメソッドは、データグラムが送信されるまでブロックされます。

次に、UDPConn オブジェクトの ReadFromUDP メソッドを使用して、サーバーから応答データグラムを読み取ります。このメソッドは、データグラムが受信されるまでブロックされ、エラー オブジェクトとデータグラム オブジェクトが返されます。データを読み込んだ後、データを取り出すことができます。

以下は単純な UDP クライアント プログラムです:

package main

import (
    "fmt"
    "net"
)

func main() {
    ip := net.ParseIP("127.0.0.1")
    addr := &net.UDPAddr{
        IP:   ip,
        Port: 8080,
    }

    conn, err := net.DialUDP("udp", nil, addr)
    if err != nil {
        fmt.Println(err)
        return
    }

    defer conn.Close()
    fmt.Printf("UDP client connected to %s:%d
", addr.IP.String(), addr.Port)

    message := []byte("Hello from UDP client")
    _, err = conn.Write(message)
    if err != nil {
        fmt.Println(err)
        return
    }

    buffer := make([]byte, 1024)
    n, _, err := conn.ReadFromUDP(buffer)
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Printf("Response from server: %s
", string(buffer[:n]))
}
  1. 概要

Go 言語では、UDP を使用したプログラミングは非常に簡単です。UDPConn を使用するだけです。 net パッケージ内のオブジェクトは、UDP データグラムを読み書きできます。この記事では、UDP サーバー プログラムと UDP クライアント プログラムの作成方法を紹介し、対応するコード例を示します。リアルタイムのデータ送信、ゲーム、その他のアプリケーションを実行する必要がある場合は、UDP プロトコルの使用を検討できます。

以上がGo で UDP を使用してプログラミングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。