debian

Rust在Debian上的网络编程指南

小樊
44
2025-08-14 04:42:43
栏目: 编程语言

以下是在Debian上进行Rust网络编程的指南:

  1. 安装Rust
    使用rustup安装Rust:

    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh  
    source $HOME/.cargo/env  # 激活环境变量  
    rustc --version  # 验证安装  
    
  2. 创建项目
    cargo创建新项目:

    cargo new network_project  
    cd network_project  
    
  3. 添加依赖
    编辑Cargo.toml,根据需求添加库:

    • 基础网络(同步):无需额外依赖,使用标准库std::net
    • 异步网络:添加tokio(需启用full特性):
      [dependencies]  
      tokio = { version = "1", features = ["full"] }  
      
  4. 编写代码

    • 同步TCP服务器(标准库)

      use std::net::{TcpListener, TcpStream};  
      use std::io::{Read, Write};  
      
      fn handle_client(mut stream: TcpStream) {  
          let mut buffer = [0; 1024];  
          loop {  
              let bytes_read = stream.read(&mut buffer).unwrap();  
              if bytes_read == 0 { break; }  
              stream.write_all(&buffer[..bytes_read]).unwrap();  
          }  
      }  
      
      fn main() -> std::io::Result<()> {  
          let listener = TcpListener::bind("127.0.0.1:7878")?;  
          for stream in listener.incoming() {  
              handle_client(stream?);  
          }  
          Ok(())  
      }  
      
    • 异步TCP服务器(tokio)

      use tokio::net::{TcpListener, TcpStream};  
      use tokio::io::{AsyncReadExt, AsyncWriteExt};  
      
      #[tokio::main]  
      async fn main() -> Result<(), Box<dyn std::error::Error>> {  
          let listener = TcpListener::bind("127.0.0.1:7878").await?;  
          loop {  
              let (mut socket, _) = listener.accept().await?;  
              tokio::spawn(async move {  
                  let mut buffer = [0; 1024];  
                  while let Ok(bytes_read) = socket.read(&mut buffer).await {  
                      if bytes_read == 0 { break; }  
                      socket.write_all(&buffer[..bytes_read]).await.unwrap();  
                  }  
              });  
          }  
      }  
      
  5. 运行与测试
    编译运行:

    cargo run  
    

    使用telnetnc测试:

    telnet localhost 7878  
    # 或  
    nc localhost 7878  
    
  6. 进阶场景

    • 异步I/O:使用tokioasync-std处理高并发连接。
    • HTTP协议:使用reqwest库实现HTTP客户端/服务器。
    • 底层控制:使用socket2库操作套接字选项(如地址重用、超时)。

参考资料

0
看了该问题的人还看了