UDP (User Datagram Protocol) はコネクションレス型のプロトコルであり、トランスポート層で非常に重要なプロトコルです。接続を確立せずにターゲット ホストにデータを直接送信できるため、リアルタイム データ送信、ゲーム、その他のアプリケーションで広く使用されており、一部のシナリオでは TCP よりも適しています。
Go 言語では UDP プログラミングも非常に簡単なので、この記事では Go 言語で UDP プログラミングを行う方法を紹介します。
UDP プロトコルでは、データはデータグラムとも呼ばれる UDP パケットにカプセル化されます。データグラムには、送信元ポート番号、宛先ポート番号、長さ、チェックサム、その他の情報が含まれます。
Go 言語では、ネット パッケージの UDPConn を使用して 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) } }
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])) }
Go 言語では、UDP を使用したプログラミングは非常に簡単です。UDPConn を使用するだけです。 net パッケージ内のオブジェクトは、UDP データグラムを読み書きできます。この記事では、UDP サーバー プログラムと UDP クライアント プログラムの作成方法を紹介し、対応するコード例を示します。リアルタイムのデータ送信、ゲーム、その他のアプリケーションを実行する必要がある場合は、UDP プロトコルの使用を検討できます。
以上がGo で UDP を使用してプログラミングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。