来个rust的文件服务器demo

该文章展示了一个用Rust编写的简易文件服务器示例,它监听本地8080端口,接受TCP连接,处理HTTPGET请求来读取并发送文件内容。当文件不存在或请求解析失败时,服务器会返回相应的HTTP错误状态码。
摘要由CSDN通过智能技术生成

好的,这是一个使用 Rust 语言实现的文件服务器的简单示例:

``` use std::fs; use std::io::{Error, ErrorKind}; use std::net::{TcpListener, TcpStream}; use std::thread;

fn main() -> Result<(), Error> { // 监听本地的 8080 端口 let listener = TcpListener::bind("127.0.0.1:8080")?;

// 不断循环,接受来自客户端的连接
for stream in listener.incoming() {
    let stream = stream?;

    // 创建新的线程处理每个客户端连接
    thread::spawn(move || {
        // 尝试从请求中解析出文件路径
        let file_path = parse_request(&amp;stream);
        if let Some(path) = file_path {
            // 尝试读取文件内容
            let contents = match fs::read(&amp;path) {
                Ok(contents) => contents,
                Err(_) => {
                    // 如果文件不存在,返回 404 错误
                    let mut stream = stream;
                    stream.write_all(b"HTTP/1.1 404 NOT FOUND\r\n\r\n").unwrap();
                    return;
                }
            };
            // 向客户端发送文件内容
            let mut stream = stream;
            stream.write_all(b"HTTP/1.1 200 OK\r\n\r\n").unwrap();
            stream.write_all(&amp;contents).unwrap();
        } else {
            // 如果无法解析出文件路径,返回 400 错误
            let mut stream = stream;
            stream.write_all(b"HTTP/1.1 400 BAD REQUEST\r\n\r\n").unwrap();
        }
    });
}

Ok(())

}

// 尝试从 HTTP 请求中解析出文件路径 fn parse_request(stream: &TcpStream) -> Option { // 读取请求的第一行,确定是 GET 请求 let mut buffer = [0; 512]; stream.read(&mut buffer).unwrap(); let request = String::from_utf8_lossy(&buffer[..]); let request_lines: Vec<&str>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值