Rust如何实现TCP通信

最近在学习Rust的网络编程,想实现一个简单的TCP通信程序,但遇到了一些问题:

  1. 在Rust中如何创建一个TCP服务器和客户端?
  2. 使用std::net模块时,如何处理可能出现的错误?
  3. 如何正确读写TCP流数据?看到有read和write方法,但不太确定具体用法
  4. 在多线程环境下处理TCP连接有什么需要注意的地方吗?
  5. 能否提供一个简单的完整示例代码?

希望有经验的开发者能分享一下实现TCP通信的最佳实践,特别是异常处理和性能优化方面的建议。

2 回复

Rust使用std::net模块实现TCP通信。服务端用TcpListener::bind()监听端口,accept()接收连接;客户端用TcpStream::connect()连接服务端。通过read()write()方法收发数据。示例代码简单清晰,适合网络编程入门。


Rust 使用标准库 std::net 模块实现 TCP 通信,分为客户端和服务端两部分。

服务端示例:

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

fn handle_client(mut stream: TcpStream) {
    let mut buffer = [0; 512];
    stream.read(&mut buffer).unwrap();
    println!("收到: {}", String::from_utf8_lossy(&buffer[..]));
    
    let response = b"Hello from server!";
    stream.write(response).unwrap();
    stream.flush().unwrap();
}

fn main() -> std::io::Result<()> {
    let listener = TcpListener::bind("127.0.0.1:8080")?;
    println!("服务端监听 8080 端口...");
    
    for stream in listener.incoming() {
        match stream {
            Ok(stream) => {
                std::thread::spawn(|| handle_client(stream));
            }
            Err(e) => eprintln!("连接失败: {}", e),
        }
    }
    Ok(())
}

客户端示例:

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

fn main() -> std::io::Result<()> {
    let mut stream = TcpStream::connect("127.0.0.1:8080")?;
    
    let message = b"Hello from client!";
    stream.write(message)?;
    
    let mut buffer = [0; 512];
    stream.read(&mut buffer)?;
    println!("服务端回复: {}", String::from_utf8_lossy(&buffer));
    
    Ok(())
}

关键点说明:

  1. 服务端通过 TcpListener::bind() 绑定地址,incoming() 接收连接
  2. 客户端通过 TcpStream::connect() 连接服务端
  3. 使用 read/write 方法进行数据读写
  4. 服务端使用多线程处理并发连接
  5. 错误处理通过 Result 类型和 ? 操作符

运行步骤:

  1. 启动服务端程序
  2. 运行客户端程序
  3. 观察控制台输出的通信信息

注意:实际生产环境建议使用 async-stdtokio 异步运行时处理高并发场景。

回到顶部