send_and_receive/
send_and_receive.rs1use std::net::{IpAddr, Ipv4Addr, SocketAddr};
2
3use tokio::time::{timeout, Duration};
4use tokio_multicast::MulticastSocket;
5
6#[tokio::main(flavor = "current_thread")]
7async fn main() -> Result<(), Box<dyn std::error::Error>> {
8 let group = Ipv4Addr::new(239, 1, 1, 11);
9 let receiver_port = 46055;
10 let sender_port = 46056;
11
12 let receiver = MulticastSocket::builder()
13 .bind(SocketAddr::from((Ipv4Addr::UNSPECIFIED, receiver_port)))
14 .join(IpAddr::V4(group))
15 .build()
16 .await?;
17
18 let sender = MulticastSocket::builder()
19 .bind(SocketAddr::from((Ipv4Addr::UNSPECIFIED, sender_port)))
20 .join(IpAddr::V4(group))
21 .build()
22 .await?;
23
24 sender
25 .send_to(b"hello multicast", SocketAddr::from((group, receiver_port)))
26 .await?;
27
28 let mut buf = [0_u8; 2048];
29 let (n, from) = timeout(Duration::from_secs(2), receiver.recv_from(&mut buf))
30 .await??
31 ;
32
33 println!("received {} bytes from {}", n, from);
34 println!("payload: {}", String::from_utf8_lossy(&buf[..n]));
35
36 Ok(())
37}