1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| use std::net::{TcpListener,TcpStream}; use std::{env, fs, thread}; use std::io::{Read,Write,Error}; use std::ops::Not;
fn handle_client(mut stream:TcpStream) ->Result<(),Error>{ let mut args: Vec<String> = env::args().collect(); println!("Incomming connection from :{}",stream.peer_addr()?); let fileName = args.pop().expect("error"); println!("fileName:{}",fileName); let mut buf=[0;512]; let mut file = fs::File::open(fileName).unwrap(); while file.read(&mut buf).unwrap()!=0 { stream.write(&buf); } return Ok(()); } fn main() { let listtener = TcpListener::bind("0.0.0.0:8888").expect("could not bind"); for stream in listtener.incoming(){ match stream { Err(e)=>{eprintln!("failed:{}",e)} Ok((stream))=>{ thread::spawn(move||{ handle_client(stream).unwrap_or_else(|error|eprintln!("{:?}",error)); }); } } } }
|