小编Man*_*man的帖子

Rust TcpStream 读后不能写,但可以不读而写。为什么?

请参阅下面的代码。

fn listen() {
    let listener = TcpListener::bind("127.0.0.1:3000").unwrap();
    
    for stream in listener.incoming() {
        let mut stream = stream.unwrap();
        let mut data_buf = Vec::new();

        stream.read_to_end(&mut data_buf).unwrap(); // Stream read
            
        println!("{}", String::from_utf8(data_buf).unwrap());

        stream.write_all(get_http_response().as_bytes()).unwrap();
    }
}

fn get_http_response() -> String {
    let status_line = "HTTP/1.1 200 OK";
    let contents = "<!DOCTYPE html>
    <html lang=\"en\">
      <head>
        <meta charset=\"utf-8\">
        <title>Poda thendi!</title>
      </head>
      <body>
        <h1>Poda thendi!</h1>
        <p>Hi from Rust</p>
      </body>
    </html>";
    let length = contents.len();

    format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}")
}

Run Code Online (Sandbox Code Playgroud)

现在,如果我在浏览器上访问 127.0.0.1:3000,它会显示待处理状态。

但如果我删除“Stream read”行,它就会按预期工作。为什么?

rust

1
推荐指数
1
解决办法
36
查看次数

标签 统计

rust ×1