rust Tcp server
use std::net::{TcpListener,TcpStream};
use std::thread;
use std::io::{Read,Write,Error};
/**
Rust 有一套独特的处理异常情况的机制,它并不像其它语言中的 try 机制那样简单。
首先,程序中一般会出现两种错误:可恢复错误和不可恢复错误。
可恢复错误的典型案例是文件访问错误,如果访问一个文件失败,有可能是因为它正在被占用,是正常的,我们可以通过等待来解决。
但还有一种错误是由编程中无法解决的逻辑错误导致的,例如访问数组末尾以外的位置。
大多数编程语言不区分这两种错误,并用 Exception (异常)类来表示错误。在 Rust 中没有 Exception。
对于可恢复错误用 Result<T, E> 类来处理
move 闭包
**/
//handles a single client
fn handle_client(mut stream:TcpStream)->Result<(),Error>{
println!("Incomming connection from :{}",stream.peer_addr()?);
let mut buf=[0;512];
loop {
let bytes_read = stream.read(&mut buf)?;
if bytes_read == 0 { return Ok(()); }
stream.write(&buf[..bytes_read])?;
}
}
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));
});
}
}
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 ggchzzz@163.com