这更多的是为了了解事情是如何工作的,所以请不要建议使用 HTTP 库。
我有以下代码
use tokio::net::{TcpListener, TcpStream};
use std::error::Error;
async fn process_socket(mut socket: TcpStream) {
socket
.write_all(b"HTTP/1.1 404
Content-Length: 0")
.await
.expect("failed to write data to socket");
socket
.flush()
.await
.expect("failed to flush socket");
}
根据这个问题,它应该是一个有效的最小 HTTP 响应。当我在浏览器中运行并访问该页面时,我得到以下信息
请注意,该列中没有状态,并且似乎无法识别该消息。
我也尝试过野生动物园,上面写着......
“无法解析响应”(NSURLErrorDomain:-1017)
我错过了什么?
剩下的代码是...
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let addr = "127.0.0.1:8080";
let listener = TcpListener::bind(&addr).await?;
println!("Listening on: {}", addr);
loop{
let (socket, _) = listener.accept().await?;
tokio::spawn(async move {
// In a loop, read data from the socket and write the data back.
process_socket(socket).await;
});
}
}