Тип net.UDPConn
Тип net.UDPConn реализует интерфейс net.Conn
и предоставляет методы для работы с UDP-соединениями.
UDP является протоколом без установления соединения,
поэтому UDPConn позволяет отправлять и получать
датаграммы от различных адресов. Основные методы типа:
ReadFrom для чтения данных с получением адреса
отправителя, WriteTo для отправки данных
указанному адресату, а также Close для закрытия
соединения.
Получение объекта UDPConn
Объект net.UDPConn создается с помощью функций
net.DialUDP для установки клиентского соединения
или net.ListenUDP для создания серверного
слушателя. Также его можно получить через функции
net.Dial или net.ListenPacket
с указанием сети "udp".
Параметры функций: первый параметр указывает тип сети ("udp", "udp4", "udp6"), второй - локальный адрес для прослушивания или адрес удаленного узла.
Синтаксис
conn, err := net.DialUDP("udp", nil, remoteAddr)
conn, err := net.ListenUDP("udp", localAddr)
Пример
Пример отправки UDP-датаграммы на удаленный сервер
с использованием DialUDP:
package main
import (
"fmt"
"net"
)
func main() {
remoteAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:8080")
if err != nil {
fmt.Println("Error resolving address:", err)
return
}
conn, err := net.DialUDP("udp", nil, remoteAddr)
if err != nil {
fmt.Println("Error dialing UDP:", err)
return
}
defer conn.Close()
message := []byte("Hello, UDP server!")
_, err = conn.Write(message)
if err != nil {
fmt.Println("Error writing data:", err)
return
}
fmt.Println("Data sent successfully")
}
Результат выполнения кода:
"Data sent successfully"
Пример
Пример чтения данных с использованием ListenUDP
и метода ReadFrom для получения адреса отправителя:
package main
import (
"fmt"
"net"
)
func main() {
localAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:8080")
if err != nil {
fmt.Println("Error resolving address:", err)
return
}
conn, err := net.ListenUDP("udp", localAddr)
if err != nil {
fmt.Println("Error listening UDP:", err)
return
}
defer conn.Close()
buffer := make([]byte, 1024)
n, addr, err := conn.ReadFrom(buffer)
if err != nil {
fmt.Println("Error reading data:", err)
return
}
fmt.Printf("Received %d bytes from %s: %s\n", n, addr, string(buffer[:n]))
}
Результат выполнения кода:
"Received 17 bytes from 127.0.0.1:54321: Hello, UDP server!"
Пример
Пример отправки ответа клиенту с использованием
метода WriteTo, который позволяет указать
адрес назначения:
package main
import (
"fmt"
"net"
)
func main() {
localAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:8080")
if err != nil {
fmt.Println("Error resolving address:", err)
return
}
conn, err := net.ListenUDP("udp", localAddr)
if err != nil {
fmt.Println("Error listening UDP:", err)
return
}
defer conn.Close()
buffer := make([]byte, 1024)
n, clientAddr, err := conn.ReadFrom(buffer)
if err != nil {
fmt.Println("Error reading data:", err)
return
}
response := []byte("Echo: " + string(buffer[:n]))
_, err = conn.WriteTo(response, clientAddr)
if err != nil {
fmt.Println("Error writing response:", err)
return
}
fmt.Println("Response sent to client")
}
Результат выполнения кода:
"Response sent to client"
Смотрите также
-
тип
net.TCPConn,
представляющий TCP-соединение -
тип
net.UDPAddr,
представляющий адрес UDP-узла -
функцию
net.Dial,
для установления соединения с указанным адресом -
функцию
net.ListenPacket,
для создания слушателя пакетных протоколов