Метод recv
Метод recv класса UdpSocket принимает
одну дейтаграмму из сокета и записывает её
в переданный буфер. Параметром метод принимает
изменяемую ссылку на буфер типа &mut [u8],
в который будут записаны полученные данные.
Метод возвращает количество принятых байтов
в виде Result<usize, io::Error>.
Если данные не помещаются в буфер, лишние байты
отбрасываются.
Синтаксис
udp_socket.recv(&mut buf)
Пример
Давайте создадим UDP-сокет на стороне сервера,
привяжем его к адресу "127.0.0.1:8080"
и примем одну дейтаграмму от клиента:
use std::net::UdpSocket;
fn main()
{
let socket = UdpSocket::bind("127.0.0.1:8080").unwrap();
let mut buf = [0u8; 1024];
let (amt, _) = socket.recv_from(&mut buf).unwrap();
let data = &buf[..amt];
println!("{:?}", String::from_utf8_lossy(data));
}
Если клиент отправит строку "abcde",
то результат выполнения кода будет следующим:
"abcde"
Пример
Давайте рассмотрим полный пример с двумя сокетами:
один отправляет данные, а другой принимает их
через метод recv:
use std::net::UdpSocket;
use std::thread;
fn main()
{
let receiver = UdpSocket::bind("127.0.0.1:8080").unwrap();
let sender = UdpSocket::bind("127.0.0.1:0").unwrap();
thread::spawn(move || {
thread::sleep(std::time::Duration::from_millis(100));
sender.send_to(b"12345", "127.0.0.1:8080").unwrap();
});
let mut buf = [0u8; 1024];
let amt = receiver.recv(&mut buf).unwrap();
println!("{}", amt);
}
Результат выполнения кода:
5