Last active
April 19, 2024 22:51
-
-
Save stoiandan/0a1e29f6435a61b2e2d43182e1971549 to your computer and use it in GitHub Desktop.
Rust multicast
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use std::net::{Ipv6Addr, SocketAddr, UdpSocket}; | |
use std::str::FromStr; | |
use std::thread; | |
fn main() { | |
// Create a IPv6 multicast address | |
let multicast_addr = | |
Ipv6Addr::from_str("ff02::11").expect("Could not create multicast address"); | |
// create a random upd socket | |
let socket = UdpSocket::bind("[::]:0").expect("Could not bind socket"); | |
match socket.join_multicast_v6(&multicast_addr, 1) { | |
Ok(_) => println!("Joined multicast group"), | |
Err(e) => eprintln!("Failed to join multicast group: {}", e), | |
} | |
let partner_socket = UdpSocket::bind("[::]:0").expect("Could not bind partner socket"); | |
match partner_socket.join_multicast_v6(&multicast_addr, 1) { | |
Ok(_) => println!("Partner joined multicast group"), | |
Err(e) => eprintln!("Partner failed to join multicast group: {}", e), | |
} | |
let handle = thread::spawn(move || { | |
let received_message_buff = &mut [0; 1024]; | |
println!("Waiting for data..."); | |
let (received_bytes_size, received_from_addr) = partner_socket | |
.recv_from(received_message_buff) | |
.expect("Could not receive message"); | |
println!( | |
"Partner received {} bytes from {}:{}", | |
received_bytes_size, | |
received_from_addr.ip(), | |
received_from_addr.port() | |
); | |
}); | |
let message = b"Hello world!"; | |
let multicast_socket = | |
SocketAddr::from_str("[ff02::11]:0").expect("Could not create multicast socket"); | |
let byte_size_sent = socket | |
.send_to(message, multicast_socket) | |
.expect("Could not send message"); | |
println!("Succesfully sent {} bytes ", byte_size_sent); | |
let _ = handle.join(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment