Skip to content

Instantly share code, notes, and snippets.

@pietgeursen
Created March 3, 2020 13:53
Show Gist options
  • Save pietgeursen/b6871fcdba976a2641a750b41334b681 to your computer and use it in GitHub Desktop.
Save pietgeursen/b6871fcdba976a2641a750b41334b681 to your computer and use it in GitHub Desktop.
use std::net::*;
use std::io;
const SEND_PORT: u16 = 24254;
const RECEIVE_PORT: u16 = 24255;
fn main() {
let send_address = format!("255.255.255.255:{}", SEND_PORT);
let receive_address = format!("255.255.255.255:{}", RECEIVE_PORT);
let cloned_receive_address = receive_address.clone();
let _thread = std::thread::spawn(move||{
let socket_receiver = bind_port(&cloned_receive_address);
loop{
let mut rx_buffer = [0;512];
socket_receiver.recv_from(&mut rx_buffer).unwrap();
println!("Received: {}", std::str::from_utf8(&rx_buffer).unwrap());
}
});
let name = get_name();
let socket_sender = bind_port(&send_address);
socket_sender.connect(send_address).expect("connect function failed");
loop{
let mut input = String::new();
match io::stdin().read_line(&mut input) {
Ok(_) => {
let name_and_message = format!("**{}**: {}", name, input);
socket_sender.send_to(name_and_message.as_bytes(), &receive_address).expect("couldn't send message");
}
Err(error) => println!("error: {}", error),
}
}
}
fn get_name() -> String{
println!("What's your name?");
let mut name = String::new();
io::stdin().read_line(&mut name).unwrap();
name.trim_end_matches('\n').to_string()
}
fn bind_port(address: &str) -> UdpSocket{
let socket = UdpSocket::bind(address).expect("couldn't bind to address");
socket.set_broadcast(true).expect("set_broadcast call failed");
socket
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment