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 协议》,转载必须注明作者和本文链接
令狐一冲
讨论数量: 2

HTTP 构建于 HTTP 之上 => HTTP 构建于 TCP 之上

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
文章
255
粉丝
120
喜欢
308
收藏
128
排名:335
访问:2.8 万
私信
所有博文
社区赞助商