当前位置:

首页 > 编程开发 > Rust在Linux上如何进行网络编程

Rust在Linux上如何进行网络编程

在Linux上搞Rust网络编程,其实比很多人想象的要直接。Rust的标准库里自带了一个叫std::net的模块,里面封装了处理网络连接的基本类型和trait。换句话说,你不需要一上来就折腾第三方库,标准库就能让你跑通一个完整的TCP服务端和客户端。 先说说环境准备。如果你机器上还没装Rust,一条

在Linux上搞Rust网络编程,其实比很多人想象的要直接。Rust的标准库里自带了一个叫std::net的模块,里面封装了处理网络连接的基本类型和trait。换句话说,你不需要一上来就折腾第三方库,标准库就能让你跑通一个完整的TCP服务端和客户端。

Rust在Linux上如何进行网络编程

先说说环境准备。如果你机器上还没装Rust,一条命令就能搞定:

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

装完之后检查一下PATH,确保cargo和rustc能用就行。

接下来创建一个新项目,名字随便起,比如rust_networking:

cargo new rust_networking
cd rust_networking

然后就是核心部分——写一个TCP服务器。打开src/main.rs,把下面这段代码贴进去:

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

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

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

这段代码干的事很直接:监听本地的7878端口,收到客户端连接后,读取最多512字节的数据,然后原封不动地写回去——也就是一个回显服务器。

客户端代码更简单,同样写在src/main.rs里(你可以把服务端和客户端分开两个文件,不过这里为了演示方便,先放在一起):

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

fn main() -> std::io::Result<()> {
    let mut stream = TcpStream::connect("127.0.0.1:7878")?;
    let message = "Hello, world!";
    stream.write_all(message.as_bytes())?;
    let mut buffer = [0; 512];
    let bytes_read = stream.read(&mut buffer)?;
    println!("Received: {}", String::from_utf8_lossy(&buffer[..bytes_read]));
    Ok(())
}

注意:服务端和客户端不能同时跑同一个文件,因为main函数只能有一个。实际操作时,要么把客户端代码单独放到examples/client.rs,要么用cargo run --bin指定二进制目标。更省事的办法是开两个终端,一个先跑服务器:

cargo run

另一个终端跑客户端(同样cargo run,但你需要确保客户端代码是当前项目的入口)。如果一切顺利,客户端会打印出服务器回显的“Hello, world!”。

这个例子虽然简单,但它暴露了真实网络编程中绕不开的两个问题:错误处理和并发。上面的代码里,客户端连接只处理一次就结束了,而且没有任何并发机制——如果同时有多个客户端连上来,后面的请求得排队等前面的处理完。实际生产环境里,你至少需要做到:

  • 对每个连接分配一个线程(std::thread::spawn),或者使用异步模型。
  • 更细致的错误处理,比如连接中断、超时、缓冲区溢出等。
  • 日志记录和配置管理,这些在小型demo里可以忽略,但线上项目一个都不能少。

说到异步,Rust生态里最常用的方案是tokio,其次是async-std和底层的mio。这些库提供了事件驱动、非阻塞I/O,能让你用少量的线程处理成千上万的并发连接。当然,标准库的std::net已经足够让你理解TCP/IP的基本交互,但真要写高并发服务,还是得拥抱异步运行时。

最后提一句安全层面:如果你的服务需要暴露在公网上,TLS/SSL是必须的。Rust这边有rustls和native-tls两个主流选择,前者纯Rust实现,后者绑定OpenSSL。具体选哪个,取决于你的部署环境和安全策略。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
编程开发 Linux
相关文章 更多
linux删除用户与用户组的方法及命令教程
linux删除用户与用户组的方法及命令教程

掌握Linux中删除用户和用户组的正确方法,避免残留文件和进程冲突。本文深入解析userdel和groupdel命令的参数用法,提供处理“用户仍在使用”等常见错误的实战方案。

Linux如何开启端口号?开放端口命令详解
Linux如何开启端口号?开放端口命令详解

详细讲解Linux如何开启端口号以及常用的开放端口命令。

crossover卸载软件下载及重新安装教程
crossover卸载软件下载及重新安装教程

遇到CrossOver运行错误或需要更新版本时,如何彻底卸载旧版并干净重装?本教程详解macOS和Linux下的卸载步骤、残留文件清理方法及官方下载渠道,确保软件环境纯净稳定。

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

PDF教程
PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
AirBuddy 3 macOS版
AirBuddy 3 macOS版
macOS

AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

AirServer macOS版
AirServer macOS版
macOS

AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

AnyDesk macOS版
AnyDesk macOS版
macOS

AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

WINDOWS 更多
Fuzor Windows版
Fuzor Windows版
Windows

Fuzor Windows版是一套面向建筑、工程与施工团队的BIM/VDC平台,可汇集多来源模型和进度数据,完成实时可视化、4D施工推演、场地物流规划、问题检查、成果演示及团队协同。

Gety Windows版
Gety Windows版
Windows

Gety Windows版是一款本地AI文件搜索工具,可索引电脑中的文档和图片,通过全文搜索、语义检索与OCR快速定位内容,并提供原版式预览、筛选和AI工具连接功能。

iMazing Windows版
iMazing Windows版
Windows

iMazing Windows版是一款面向iPhone、iPad和iPod用户的本地设备管理工具,可在电脑上完成多版本备份、照片与音乐传输、信息导出、应用数据管理以及新旧设备迁移。