Rust 是一种系统编程语言,它具有高性能、内存安全和并发性
cargo new network_example
cd network_example
Cargo.toml
文件中添加依赖项。对于这个例子,我们将使用 tokio
作为异步运行时和 tokio-util
中的 compat
模块,以便与旧的套接字 API 兼容。[dependencies]
tokio = { version = "1", features = ["full"] }
tokio-util = { version = "0.6", features = ["compat"] }
在 src/main.rs
文件中,编写以下代码:
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:8080").await?;
println!("Server is running on 127.0.0.1:8080");
loop {
// 接受客户端连接
let (mut socket, addr) = listener.accept().await?;
println!("New connection from: {}", addr);
// 处理客户端连接的异步任务
tokio::spawn(async move {
let mut buffer = [0; 1024];
// 读取客户端发送的数据
match socket.read(&mut buffer).await {
Ok(_) => {
// 将接收到的数据回发给客户端
if let Err(e) = socket.write_all(&buffer[0..buffer.len()]).await {
eprintln!("Failed to write to socket: {}", e);
}
},
Err(e) => {
eprintln!("Failed to read from socket: {}", e);
},
}
});
}
}
这个示例中的服务器会监听本地地址 127.0.0.1:8080
,并在接受到客户端连接时,将接收到的数据回发给客户端。
在 src/main.rs
文件中,修改代码以创建一个 TCP 客户端:
use tokio::net::{TcpStream, TcpListener};
use tokio::io::{AsyncReadExt, AsyncWriteExt};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// 连接到服务器
let mut stream = TcpStream::connect("127.0.0.1:8080").await?;
println!("Connected to server");
// 向服务器发送数据
if let Err(e) = stream.write_all(b"Hello, server!").await {
eprintln!("Failed to write to server: {}", e);
}
// 从服务器接收数据
let mut buffer = [0; 1024];
match stream.read(&mut buffer).await {
Ok(_) => {
println!("Received from server: {}", String::from_utf8_lossy(&buffer[..]));
},
Err(e) => {
eprintln!("Failed to read from server: {}", e);
},
}
Ok(())
}
这个示例中的客户端会连接到服务器,发送一条消息 “Hello, server!”,然后接收并打印服务器返回的响应。
首先,运行服务器:
cargo run --bin server
然后,运行客户端:
cargo run --bin client
这个简单的示例展示了如何使用 Rust 进行基本的 TCP 网络编程。你可以根据自己的需求扩展这个示例,例如使用 UDP、WebSocket 或其他协议。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。