diff --git a/src/main.rs b/src/main.rs index 03f6bed..1a889c4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,32 @@ use std::net::{TcpListener, TcpStream, SocketAddr}; use std::io::Result; +use std::fs::File; +use std::io::Write; +use std::io; +use std::path::Path; -fn handle_client(stream: TcpStream, addr: SocketAddr) { - println!("Hello, world!"); +fn handle_client(mut stream: TcpStream, addr: SocketAddr) { + println!("Received connection from {:?}", addr.port()); + let mut filename = addr.port().to_string(); + if Path::new(&filename).exists() { + let mut buffer = File::open(&filename).unwrap(); + match io::copy(&mut buffer, &mut stream) { + Ok(_written) => (), + Err(e) => println!("Failed to file {:?} to TCP stream: {:?}", filename, e), + } + } else { + let mut buffer = File::create(&filename).unwrap(); + match io::copy(&mut stream, &mut buffer) { + Ok(_written) => { + filename.push('\n'); + match stream.write_all(filename.as_bytes()) { + Err(e) => println!("Error writing to socket {:?}", e), + _ => (), + } + } + Err(e) => println!("Failed to write TCP stream to file {:?} failed with {:?}", filename, e), + } + } } fn main() -> Result<()> {