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

Bagaimana untuk memprogram menggunakan UDP dalam Go?

May 11, 2023 pm 05:07 PM
pergi bahasa Cara menggunakan pengaturcaraan udp

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)
    }
}
Salin selepas log masuk
  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]))
}
Salin selepas log masuk
  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 Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

Repo: Cara menghidupkan semula rakan sepasukan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah masalah dengan thread giliran di crawler colly go? Apakah masalah dengan thread giliran di crawler colly go? Apr 02, 2025 pm 02:09 PM

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Perpustakaan apa yang digunakan untuk operasi nombor terapung di GO? Apr 02, 2025 pm 02:06 PM

Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Perpustakaan mana yang dibangunkan oleh syarikat besar atau disediakan oleh projek sumber terbuka yang terkenal? Perpustakaan mana yang dibangunkan oleh syarikat besar atau disediakan oleh projek sumber terbuka yang terkenal? Apr 02, 2025 pm 04:12 PM

Perpustakaan mana yang dibangunkan oleh syarikat besar atau projek sumber terbuka yang terkenal? Semasa pengaturcaraan di GO, pemaju sering menghadapi beberapa keperluan biasa, ...

Bagaimana untuk menyelesaikan masalah yang label struktur tersuai di Goland tidak berkuatkuasa? Bagaimana untuk menyelesaikan masalah yang label struktur tersuai di Goland tidak berkuatkuasa? Apr 02, 2025 pm 12:51 PM

Mengenai masalah tag struktur tersuai di Goland apabila menggunakan Goland untuk pembangunan bahasa Go, anda sering menghadapi beberapa masalah konfigurasi. Salah satu daripada mereka adalah ...

Di Go, mengapa rentetan percetakan dengan fungsi println dan rentetan () mempunyai kesan yang berbeza? Di Go, mengapa rentetan percetakan dengan fungsi println dan rentetan () mempunyai kesan yang berbeza? Apr 02, 2025 pm 02:03 PM

Perbezaan antara percetakan rentetan dalam bahasa Go: perbezaan kesan menggunakan fungsi println dan rentetan () sedang ...

Pergi bahasa tidak cekap dalam memproses akses URL besar -besaran, bagaimana untuk mengoptimumkannya? Pergi bahasa tidak cekap dalam memproses akses URL besar -besaran, bagaimana untuk mengoptimumkannya? Apr 02, 2025 am 10:15 AM

Strategi Pengoptimuman Prestasi untuk GO Language URL Access Massive Artikel ini mencadangkan penyelesaian pengoptimuman prestasi untuk masalah menggunakan bahasa Go untuk memproses akses URL secara besar -besaran. Program sedia ada dari CSV ...

Apakah perbezaan antara struktur definisi kata kunci `var` dan` type` dalam bahasa Go? Apakah perbezaan antara struktur definisi kata kunci `var` dan` type` dalam bahasa Go? Apr 02, 2025 pm 12:57 PM

Dua cara untuk menentukan struktur dalam bahasa Go: perbezaan antara VAR dan jenis kata kunci. Apabila menentukan struktur, pergi bahasa sering melihat dua cara menulis yang berbeza: pertama ...

See all articles