Rust 编程小项目:WebServer 01
视频地址
头条地址:https://www.ixigua.com/i680718929763709798...
B站地址:https://www.bilibili.com/video/BV177411m78...
github地址
https://github.com/anonymousGiga/web-serve...
目的
本节的例子开始教大家用Rust语言创建一个简单的web server程序。
web server 中涉及到的两个主要协议是 超文本传输协议(Hypertext Transfer Protocol,HTTP)和 传输控制协议(Transmission Control Protocol,TCP)。这两者都是 请求-响应(request-response)协议,也就是说,有 客户端(client)来初始化请求,并有 服务端(server)监听请求并向客户端提供响应。请求与响应的内容由协议本身定义。
TCP为底层协议,一般来说,HTTP构建于HTTP之上。本节就是处理 TCP 和 HTTP 请求与响应的原始字节数据。
参考
https://doc.rust-lang.org/std/net/index.ht...
pub struct TcpListener(_); //A TCP socket server, listening for connections.
重点关注其以下两个函数:
函数:pub fn bind<A: ToSocketAddrs>(addr: A) -> Result<TcpListener>;
功能描述:绑定伊特特定的地址创建一个TcpListener。
函数:pub fn incoming(&self) -> Incoming;
功能描述:返回连结接收的迭代器。
监听TCP连结
use std::net::{TcpListener, TcpStream};
fn handle_client(_stream: TcpStream) {
println!("有一个链接");
}
fn main() -> std::io::Result<()> {
let listener = TcpListener::bind("127.0.0.1:80")?;
for stream in listener.incoming() {
handle_client(stream?);
}
Ok(())
}
读取请求内容
将上面的handle_client的内容修改为如下:
fn handle_client(stream: TcpStream) {
let mut buffer = [0; 512];
stream.read(&mut buffer).unwrap();
println!("Request: {}",
String::from_utf8_lossy(&buffer[..]));
}
重新运行,即打印链接请求的内容
本作品采用《CC 协议》,转载必须注明作者和本文链接
HTTP 构建于 HTTP 之上
=>HTTP 构建于 TCP 之上
@qufo 感谢提醒