└── sec0nd /sec0nd: -------------------------------------------------------------------------------- 1 | use std::io::{BufRead, BufReader, Write}; 2 | use std::net::{TcpListener, TcpStream}; 3 | use std::sync::{Arc, Mutex}; 4 | use std::thread; 5 | 6 | fn handle_client(mut stream: TcpStream, clients: Arc>>) { 7 | let mut reader = BufReader::new(stream.try_clone().unwrap()); 8 | let mut line = String::new(); 9 | 10 | while reader.read_line(&mut line).unwrap() > 0 { 11 | let message = line.clone(); 12 | line.clear(); 13 | let clients = clients.lock().unwrap(); 14 | for client in clients.iter() { 15 | let _ = client.write_all(message.as_bytes()); 16 | } 17 | } 18 | } 19 | 20 | fn main() { 21 | let listener = TcpListener::bind("127.0.0.1:8080").unwrap(); 22 | let clients = Arc::new(Mutex::new(Vec::new())); 23 | 24 | for stream in listener.incoming() { 25 | let stream = stream.unwrap(); 26 | let clients_clone = Arc::clone(&clients); 27 | clients.lock().unwrap().push(stream.try_clone().unwrap()); 28 | thread::spawn(move || handle_client(stream, clients_clone)); 29 | } 30 | } 31 | --------------------------------------------------------------------------------