最近听闻Rust已经逐步进入了Linux Kernel,而且一个很好用的软件yazi也是rust开发的,所以想了解一下rust的开发和使用。
安装
官网:快速配置 Rust 开发环境并编写一个小应用!
官方也提供环境帮助你练习:Rust演练场
下载命令
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
下载之后使用默认安装就好了。
简单的udp发送工具
main.rs
// 库导入
use anyhow::{Context, Result};
use bytes::Bytes;
use clap::Parser;
use std::fs::File;
use std::io::Read;
use std::net::SocketAddr;
use std::time::Duration;
use tokio::net::UdpSocket;
use tokio::time;/// UDP 文件发送工具
#[derive(Parser, Debug)]
#[command(author, version, about)]
struct Args {/// 目标地址 (例如: 127.0.0.1:8080)#[arg(short, long)]target: SocketAddr,/// 要发送的文件路径#[arg(short, long)]file: String,/// 发送速率 (KB/s)#[arg(short, long, default_value_t = 100)]rate_kb: usize,
}// main函数,异步,允许使用await
#[tokio::main]
async fn main() -> Result<()> {let args = Args::parse();// 读取文件内容let mut file = File::open(&args.file).context("无法打开文件")?;let mut buffer = Vec::new();file.read_to_end(&mut buffer).context("读取文件失败")?;let data = Bytes::from(buffer);// 计算发送参数let packet_size = 1024; // 每个 UDP 包的大小 (字节)let packets = data.chunks(packet_size);let total_packets = packets.len();let delay_ms = (packet_size as f64 / (args.rate_kb as f64 * 1024.0 / 1000.0)) as u64;println!("发送 {} ({} bytes) 到 {},速率: {} KB/s, 包大小: {} bytes, 间隔: {} ms",args.file,data.len(),args.target,args.rate_kb,packet_size,delay_ms);// 创建 UDP socketlet socket = UdpSocket::bind("0.0.0.0:0").await.context("绑定 UDP 端口失败")?;// 定时发送let mut interval = time::interval(Duration::from_millis(delay_ms));for (i, chunk) in packets.enumerate() {interval.tick().await;socket.send_to(chunk, args.target).await.context("发送失败")?;println!("已发送 {}/{} 包 ({} bytes)", i + 1, total_packets, chunk.len());}println!("发送完成!");Ok(())
}
Cargo.toml
[package]
name = "udp_file_sender"
version = "0.1.0"
edition = "2024"[dependencies]
tokio = { version = "1.0", features = ["full"] } # 异步运行时
anyhow = "1.0" # 错误处理
bytes = "1.0" # 高效字节处理
clap = { version = "4.0", features = ["derive"] } # 命令行参数解析