rust网络编程怎么用

时间:2025-01-25 12:43:22 网络游戏

在 Rust 中进行网络编程,主要可以利用标准库中的 `std::net` 模块,以及社区提供的异步运行时库如 Tokio 和 Async-std。以下是一个简单的 TCP 服务器和客户端的示例,以及一个 UDP 服务的示例。

TCP 服务器和客户端示例

TCP 服务器

```rust

use std::net::{TcpListener, TcpStream};

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

fn main() -> std::io::Result<()> {

// 监听本地的 7878 端口

let listener = TcpListener::bind("127.0.0.1:7878")?;

println!("服务端正在等待连接...");

for stream in listener.incoming() {

let mut stream = stream?;

println!("新客户端连接: {}", stream.peer_addr()?);

// 读取客户端发来的数据

let mut buffer = [0; 512];

stream.read(&mut buffer)?;

println!("收到数据: {}", String::from_utf8_lossy(&buffer));

// 向客户端发送响应

stream.write(b"HTTP/1.1 200 OK\r\n\r\nHello, world!")?;

}

Ok(())

}

```

TCP 客户端

```rust

use std::net::TcpStream;

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

fn main() -> std::io::Result<()> {

// 连接到服务器的 7878 端口

let mut stream = TcpStream::connect("127.0.0.1:7878")?;

// 向服务器发送数据

stream.write(b"Hello, server!")?;

// 读取服务器的响应

let mut buffer = [0; 512];

stream.read(&mut buffer)?;

println!("收到服务器的响应: {}", String::from_utf8_lossy(&buffer));

Ok(())

}

```

UDP 服务示例

```rust

use std::net::{UdpSocket, SocketAddr};

fn main() -> std::io::Result<()> {

// 创建一个 UDP 套接字

let socket = UdpSocket::bind("127.0.0.1:7878")?;

println!("服务端正在等待 UDP 数据包...");

let mut buffer = [0; 512];

// 接收来自客户端的数据包

let (len, addr) = socket.recv_from(&mut buffer)?;

println!("收到来自 {} 的数据: {}", addr, String::from_utf8_lossy(&buffer[..len]));

// 向客户端发送响应

socket.send_to(b"Hello, client!", &addr)?;

Ok(())

}

```

使用异步运行时

如果你希望使用异步运行时来处理大量并发连接,可以使用 Tokio 或 Async-std。以下是使用 Tokio 的示例:

TCP 服务器(异步)

```rust

use tokio::net::{TcpListener, TcpStream};

use tokio::io::{Read, Write};

[tokio::main]

async fn main() -> std::io::Result<()> {

// 监听本地的 7878 端口

let listener = TcpListener::bind("127.0.0.1:7878").await?;

println!("服务端正在等待连接...");

loop {

// 接受客户端连接

let (mut stream, addr) = listener.accept().await?;

println!("新客户端连接: {}", addr);

// 处理客户端连接的异步任务

tokio::spawn(async move {

let mut buffer = [0; 512];

// 读取客户端发来的数据

stream.read(&mut buffer).await.unwrap();

println!("收到数据: {}", String::from_utf8_lossy(&buffer));

// 向客户端发送响应

stream.write(b"HTTP/1.1 200 OK\r\n\r\nHello, world!").await.unwrap();

});

}

}

```

UDP 服务(异步)