Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpUdSd 256 of 280 menu
◀ ▶

Отправка UDP-пакета в Go

Отправка на известный хост начинается с строки адреса в формате хост и порт через двоеточие. Удобный путь: открыть соединение для протокола udp и дальше писать в него байты как в поток, хотя по сути каждая запись уходит отдельной датаграммой.

Откроем связь с "127.0.0.1:9091" и отправим короткую строку:

package main import ( "fmt" "net" ) func main() { conn, err := net.Dial("udp", "127.0.0.1:9091") if err != nil { fmt.Println("dial error") return } defer conn.Close() _, err = conn.Write([]byte("ping")) if err != nil { fmt.Println("write error") return } fmt.Println("sent") }

На экране "sent". Если на порту никто не слушает, запись все равно может пройти: протокол не подтверждает, что пакет кто-то принял.

Тот же адрес можно разобрать в структуру и открыть низкоуровневый сокет, если нужен именно тип для датаграмм:

package main import ( "fmt" "net" ) func main() { raddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:9091") if err != nil { fmt.Println("resolve error") return } conn, err := net.DialUDP("udp", nil, raddr) if err != nil { fmt.Println("dial error") return } defer conn.Close() _, err = conn.Write([]byte("ping")) if err != nil { fmt.Println("write error") return } fmt.Println("sent") }

Дано сообщение:

msg := []byte("hello")

Отправьте msg на "127.0.0.1:9091" через Dial и напечатайте "ok" при успешной записи.

Дан адрес:

target := "127.0.0.1:9091"

Разберите target в структуру адреса и откройте сокет для записи одного пакета со строкой "probe".

Скажите, чем запись через открытое для udp соединение отличается от долгого потока TCP, если смотреть только на сторону отправителя.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить