РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1158 of 1245 menu

Метод recv_from

Метод recv_from класса UdpSocket принимает одну UDP-дейтаграмму от любого отправителя. Метод блокирует текущий поток до тех пор, пока не придёт хотя бы одна дейтаграмма. Параметром метод принимает изменяемый буфер, в который будет записано полученное сообщение. Возвращает метод результат Result, содержащий кортеж из количества прочитанных байт и адреса источника SocketAddr.

Синтаксис

socket.recv_from(buf)

Пример

Давайте создадим UDP-сокет, привязанный к локальному адресу, и примем одну дейтаграмму от отправителя:

use std::net::UdpSocket; fn main() { let socket = UdpSocket::bind("127.0.0.1:0").unwrap(); let addr = socket.local_addr().unwrap(); let sender = UdpSocket::bind("127.0.0.1:0").unwrap(); sender.send_to(b"abcde", addr).unwrap(); let mut buf = [0u8; 1024]; let (n, src) = socket.recv_from(&mut buf).unwrap(); println!("{}", n); println!("{}", String::from_utf8_lossy(&buf[..n])); }

Результат выполнения кода:

5 "abcde"

Пример

Давайте примем несколько дейтаграмм в цикле и выведем адрес источника для каждой из них:

use std::net::UdpSocket; fn main() { let socket = UdpSocket::bind("127.0.0.1:0").unwrap(); let addr = socket.local_addr().unwrap(); let sender = UdpSocket::bind("127.0.0.1:0").unwrap(); sender.send_to(b"12345", addr).unwrap(); sender.send_to(b"abcde", addr).unwrap(); let mut buf = [0u8; 1024]; for _ in 0..2 { let (n, src) = socket.recv_from(&mut buf).unwrap(); println!("{} bytes from {}", n, src); } }

Результат выполнения кода:

5 bytes from 127.0.0.1:xxxxx 5 bytes from 127.0.0.1:xxxxx

Смотрите также

  • метод UdpSocket,
    который представляет UDP-сокет
  • метод bind,
    который привязывает сокет к адресу
  • метод send_to,
    который отправляет дейтаграмму по адресу
  • метод peek_from,
    который читает дейтаграмму без её удаления из очереди
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить