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

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

Перед отправкой сокет нужно открыть на своем порту, иначе ОС не примет исходящий трафик от программы. Локальный адрес 127.0.0.1 удобен для примеров на одной машине: пакет не уходит в интернет.

Подключим модуль сети, создадим сокет на порту 7001 и передадим короткое сообщение на порт 7002:

use std::net::UdpSocket; fn main() { let socket = match UdpSocket::bind("127.0.0.1:7001") { Ok(s) => s, Err(_) => { println!("bind fail"); return; } }; let payload = b"ping"; match socket.send_to(payload, "127.0.0.1:7002") { Ok(n) => println!("sent {}", n), Err(_) => println!("send fail"), } }

При успехе метод возвращает, сколько байт ушло в сеть. Если порт занят или адрес неверный, сопоставление попадет в ветку ошибки.

Тот же сокет может отправить несколько пакетов подряд на один и тот же адрес:

use std::net::UdpSocket; fn main() { let socket = match UdpSocket::bind("127.0.0.1:7001") { Ok(s) => s, Err(_) => return, }; let first = b"one"; let second = b"two"; match socket.send_to(first, "127.0.0.1:7002") { Ok(_) => {} Err(_) => return, } match socket.send_to(second, "127.0.0.1:7002") { Ok(n) => println!("second {}", n), Err(_) => println!("fail"), } }

Дан адрес:

let addr = "127.0.0.1:7002";

Откройте сокет на 127.0.0.1:7001, передайте байты b"hi" на этот адрес и выведите ok только при успешной отправке.

Дан адрес:

let addr = "127.0.0.1:7001";

Привяжите сокет к этому адресу, отправьте b"ask" на 127.0.0.1:7002 и напечатайте число переданных байт из варианта успеха.

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

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