以下是在Debian上进行Rust网络编程的指南:
安装Rust
使用rustup
安装Rust:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env # 激活环境变量
rustc --version # 验证安装
创建项目
用cargo
创建新项目:
cargo new network_project
cd network_project
添加依赖
编辑Cargo.toml
,根据需求添加库:
std::net
。tokio
(需启用full
特性):[dependencies]
tokio = { version = "1", features = ["full"] }
编写代码
同步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();
}
});
}
}
运行与测试
编译运行:
cargo run
使用telnet
或nc
测试:
telnet localhost 7878
# 或
nc localhost 7878
进阶场景
tokio
或async-std
处理高并发连接。reqwest
库实现HTTP客户端/服务器。socket2
库操作套接字选项(如地址重用、超时)。参考资料: