В этой статье блога мы погрузимся в мир отправки и прослушивания UDP-пакетов с использованием языка программирования Go (Golang). Мы рассмотрим различные методы и предоставим примеры кода, которые помогут вам понять и реализовать связь UDP в ваших проектах Golang. Итак, пристегнитесь и начнем!
Методы отправки UDP-пакетов:
-
Использование пакета
net
:package main import ( "fmt" "net" ) func main() { // Create a UDP address addr, err := net.ResolveUDPAddr("udp", "localhost:8080") if err != nil { fmt.Println("ResolveUDPAddr error:", err) return } // Create a UDP connection conn, err := net.DialUDP("udp", nil, addr) if err != nil { fmt.Println("DialUDP error:", err) return } defer conn.Close() // Send data data := []byte("Hello, UDP!") _, err = conn.Write(data) if err != nil { fmt.Println("Write error:", err) return } fmt.Println("UDP packet sent successfully!") }
-
Использование пакета
syscall
:package main import ( "fmt" "syscall" ) func main() { // Create a socket fd, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_DGRAM, syscall.IPPROTO_UDP) if err != nil { fmt.Println("Socket error:", err) return } defer syscall.Close(fd) // Set destination address addr := syscall.SockaddrInet4{ Port: 8080, Addr: [4]byte{127, 0, 0, 1}, } // Send data data := []byte("Hello, UDP!") err = syscall.Sendto(fd, data, 0, &addr) if err != nil { fmt.Println("Sendto error:", err) return } fmt.Println("UDP packet sent successfully!") }
Методы прослушивания UDP-пакетов:
-
Использование пакета
net
:package main import ( "fmt" "net" ) func main() { // Create a UDP address addr, err := net.ResolveUDPAddr("udp", ":8080") if err != nil { fmt.Println("ResolveUDPAddr error:", err) return } // Create a UDP connection conn, err := net.ListenUDP("udp", addr) if err != nil { fmt.Println("ListenUDP error:", err) return } defer conn.Close() // Receive data buffer := make([]byte, 1024) n, addr, err := conn.ReadFromUDP(buffer) if err != nil { fmt.Println("ReadFromUDP error:", err) return } fmt.Println("Received UDP packet from", addr) fmt.Println("Data:", string(buffer[:n])) }
-
Использование пакета
syscall
:package main import ( "fmt" "syscall" ) func main() { // Create a socket fd, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_DGRAM, syscall.IPPROTO_UDP) if err != nil { fmt.Println("Socket error:", err) return } defer syscall.Close(fd) // Bind the socket to the listening address addr := syscall.SockaddrInet4{ Port: 8080, Addr: [4]byte{0, 0, 0, 0}, } err = syscall.Bind(fd, &addr) if err != nil { fmt.Println("Bind error:", err) return } // Receive data buffer := make([]byte, 1024) n, _, err := syscall.Recvfrom(fd, buffer, 0) if err != nil { fmt.Println("Recvfrom error:", err) return } fmt.Println("Received UDP packet") fmt.Println("Data:", string(buffer[:n])) }