rustTcpServer

  1. rust Tcp server

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

文章标题:rustTcpServer

字数:339

本文作者:ggchzzz

发布时间:2022-03-04, 01:33:04

最后更新:2023-12-22, 23:17:54

原始链接:https://anska.info/post/4.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

github