CentOS Rust网络编程实战指南

作者:技术拾光

时间:2026-07-25

浏览:622

在CentOS系统上搭建Rust网络编程环境,依次安装Rust、创建项目、添加tokio和hyper依赖,编写TCP回显服务器监听8080端口,通过cargorun编译运行,并用telnet客户端测试,实现多线程网络服务。

文章目录

在CentOS上开展Rust网络编程,环境搭建是首要步骤。以下从零开始,逐步完成整个流程。

CentOS Rust网络编程实战指南

1. 安装Rust

使用以下命令自动下载并执行安装脚本:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

安装完成后,将Rust添加到PATH中,确保命令行能找到rustc和cargo:

source $HOME/.cargo/env

2. 新建Rust项目

使用cargo new命令创建项目,例如命名为rust_network_program:

cargo new rust_network_program
cd rust_network_program

3. 添加依赖(可选)

若计划使用异步框架,tokio和hyper是经典组合。打开Cargo.toml,在[dependencies]下添加:

[dependencies]
tokio = { version = "1", features = ["full"] }
hyper = "0.14"

如果仅进行简单的TCP实验,标准库已足够,可跳过此步。

4. 编写网络代码

打开src/main.rs,编写以下TCP回显服务器,监听8080端口并返回接收到的数据:

use std::io::{Read, Write};
use std::net::{TcpListener, TcpStream};

fn handle_client(mut stream: TcpStream) {
    let mut buffer = [0; 512];
    loop {
        let bytes_read = match stream.read(&mut buffer) {
            Ok(n) if n == 0 => return,
            Ok(n) => n,
            Err(e) => {
                eprintln!("Error reading from socket: {:?}", e);
                return;
            }
        };
        if let Err(e) = stream.write_all(&buffer[..bytes_read]) {
            eprintln!("Error writing to socket: {:?}", e);
            return;
        }
    }
}

fn main() -> std::io::Result<()> {
    let listener = TcpListener::bind("127.0.0.1:8080")?;
    for stream in listener.incoming() {
        match stream {
            Ok(stream) => {
                std::thread::spawn(|| handle_client(stream));
            }
            Err(e) => {
                eprintln!("Error: {}", e);
            }
        }
    }
    Ok(())
}

这段代码为每个连接创建一个新线程处理,是多线程TCP服务器的入门模板。

5. 运行程序

在项目目录下执行:

cargo run

首次编译较慢,需下载依赖并构建,后续运行速度会提升。

6. 测试网络服务

使用telnet连接测试:

telnet 127.0.0.1 8080

输入任意内容,若服务器原样返回,说明运行成功。也可自行编写客户端程序测试,此处不再展开。

以上是基础的入门示例。Rust网络编程生态还包括异步编程、TLS/SSL、Unix域套接字和自定义协议解析等,均有成熟库支持。具体使用需参考官方文档或对应库说明。先走通上述流程,后续深入将更加轻松。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›