Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk memprogram menggunakan UDP dalam Go?

Bagaimana untuk memprogram menggunakan UDP dalam Go?

王林
王林asal
2023-05-11 17:07:361916semak imbas

UDP (User Datagram Protocol) ialah protokol berorientasikan tanpa sambungan dan merupakan protokol yang sangat penting dalam lapisan pengangkutan. Ia boleh menghantar data terus kepada hos sasaran tanpa membuat sambungan, jadi ia digunakan secara meluas dalam penghantaran data masa nyata, permainan dan aplikasi lain, dan lebih sesuai daripada TCP dalam beberapa senario.

Menggunakan pengaturcaraan UDP dalam bahasa Go juga sangat mudah. ​​Artikel ini akan memperkenalkan cara menggunakan pengaturcaraan UDP dalam bahasa Go.

  1. Fahami datagram protokol UDP

Dalam protokol UDP, data dikapsulkan ke dalam paket UDP, juga dipanggil datagram. Datagram mengandungi nombor port sumber, nombor port destinasi, panjang, checksum dan maklumat lain.

Dalam bahasa Go, UDPConn pakej bersih boleh digunakan untuk membaca dan menulis datagram UDP.

  1. Tulis atur cara pelayan UDP

Dalam atur cara pelayan UDP, anda perlu mencipta alamat UDP terlebih dahulu, iaitu, gunakan kaedah ResolveUDPAddr dalam pakej bersih, yang menerima dua parameter, masing-masing jenis protokol dan alamat pelayan.

Kemudian, gunakan kaedah ListenUDP dalam pakej bersih untuk mendengar alamat Kaedah ini akan mengembalikan objek UDPConn, yang boleh digunakan untuk menerima dan menghantar datagram UDP.

Langkah seterusnya ialah proses membaca datagram Gunakan kaedah ReadFromUDP objek UDPConn untuk membaca datagram yang dihantar oleh klien Kaedah ini akan menyekat sehingga datagram diterima dan mengembalikan objek ralat dan datagram objek. Selepas membaca data, anda boleh mengeluarkan data dan memproses data, seperti mengira nilai cincang data. Kemudian gunakan kaedah WriteToUDP objek UDPConn untuk menghantar datagram tindak balas kepada klien.

Berikut ialah program pelayan UDP yang mudah:

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. Menulis program klien UDP

Dalam program klien UDP, anda perlu membuat Alamat UDP, iaitu, gunakan kaedah ResolveUDPAddr dalam pakej bersih Kaedah ini menerima dua parameter, iaitu jenis protokol dan alamat pelayan.

Kemudian, gunakan kaedah DialUDP untuk menyambung ke alamat pelayan, yang akan mengembalikan objek UDPConn, yang boleh digunakan untuk menghantar datagram UDP ke pelayan.

Langkah seterusnya ialah menghantar datagram ke pelayan Gunakan kaedah Tulis objek UDPConn untuk menghantar datagram ke pelayan.

Kemudian, gunakan kaedah ReadFromUDP objek UDPConn untuk membaca datagram tindak balas daripada pelayan Kaedah ini akan menyekat sehingga datagram diterima dan mengembalikan objek ralat dan objek datagram. Selepas membaca data, anda boleh mengeluarkan data.

Berikut ialah program klien UDP yang mudah:

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. Ringkasan

Dalam bahasa Go, pengaturcaraan dengan UDP adalah sangat mudah, hanya gunakan The UDPConn objek dalam pakej bersih boleh membaca dan menulis datagram UDP. Artikel ini memperkenalkan cara menulis program pelayan UDP dan program klien UDP, dan menyediakan contoh kod yang sepadan. Apabila anda perlu menjalankan penghantaran data masa nyata, permainan dan aplikasi lain, anda boleh mempertimbangkan untuk menggunakan protokol UDP.

Atas ialah kandungan terperinci Bagaimana untuk memprogram menggunakan UDP dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn