I'm new to Rust.
mod errors;
mod result;
#[cfg(test)]
mod tests;
use std::io::{Error, Read, Write};
use std::net::{TcpListener, TcpStream};
use std::thread;
pub use self::errors::ServerSessionError;
pub use self::result::ServerSessionResult;
pub struct Server {
addr: Option<String>,
listener: TcpListener,
}
impl Server {
pub fn new() -> Result<(Server, Vec<ServerSessionResult>), ServerSessionError> {
let server = Server {
addr: Some("somewhere".to_string()),
listener: TcpListener::bind("127.0.0.1:1935").unwrap(),
};
let mut results = Vec::with_capacity(4);
Ok((server, results))
}
pub fn listen_and_serve(&self) {
// Build a server
println!("Listening...");
for streams in self.listener.incoming() {
match streams {
Err(e) => { eprintln!("error: {}", e) },
Ok(stream) => {
thread::spawn(move || {
handler(stream).unwrap_or_else(|error| eprintln!("{:?}", error));
});
}
}
}
}
}
// Starts with being connected from a client
fn handler(mut stream: TcpStream) -> Result<(), Error> {
println!("Connection from {}", stream.peer_addr()?);
let mut buffer = [0; 1024];
loop {
let nbytes = stream.read(&mut buffer)?;
if nbytes == 0 {
return Ok(());
}
stream.write(&buffer[..nbytes])?;
stream.flush()?;
}
}
I could build a tcp server.
Then I want to print data from client.
Although I have googled TcpListener ,TcpStream, and BufReader, I don't know where to start.
Give me an advice...
Help me!