文章目录
- 构建工程
- server 接收请求
- client 发送请求
- server 接收消息返回
- client 发送消息
内容来自:软件工艺师 - Rust Web 全栈开发教程【完结】
https://www.bilibili.com/video/BV1RP4y1G7KF?p=2
构建工程
# 创建 workspace - 可以容纳多个 rust 项目,可以把多个 rust 项目作为一个单元来管理
d
# 使用 vscode 打开 s1
code .
s1 - Cargo.toml
删掉原来的内容,配置 workspace
[workspace]
members=["tcpserver","tcpclient"]
server 接收请求
tcpserver – src – main.rs
use std::net::TcpListener;
fn main() {
// 创建 listener,绑定到本地端口 3000
let listener = TcpListener::bind("127.0.0.1:3000").unwrap();
println!("Runing on port 3000...");
// 如果只想接受一次请求
// let ret = listener.accept().unwrap(); // accept() 返回一个元组
// 循环接收请求
for stream in listener.incoming() { // incoming 返回迭代器,监听 listener 接收到的连接,连接代表一个 字节流 tcpstream
let _stream = stream.unwrap();
println!("Connection establised !")
}
}
运行
cargo run -p tcpserver
client 发送请求
tcpclient – src – main.rs
use std::net::TcpStream;
fn main() {
let _stream = TcpStream::connect("127.0.0.1:3000").unwrap();
}
cargo run -p tcpclient
server 接收消息返回
修改文件 tcpserver – src – main.rs
use std::io::{Read, Write};
use std::net::TcpListener;
fn main() {
// 创建 listener,绑定到本地端口 3000
let listener = TcpListener::bind("127.0.0.1:3000").unwrap();
println!("Runing on port 3000...");
// 如果只想接受一次请求
// let ret = listener.accept().unwrap(); // accept() 返回一个元组
// 循环接收请求
for stream in listener.incoming() { // incoming 返回迭代器,监听 listener 接收到的连接,连接代表一个 字节流 tcpstream
let mut stream = stream.unwrap();
println!("Connection establised !")
let mut buffer = [0; 1024]; // 长度是 1024,初始化都为 0
// 读
stream.read(&mut buffer).unwrap;
// 返回
stream.write(&mut buffer).unwrap;
}
}
client 发送消息
修改文件 tcpclient – src – main.rs
use std::io::{Read, Write};
use std::net::TcpStream;
use std::io::str;
fn main() {
let mut stream = TcpStream::connect("127.0.0.1:3000").unwrap();
stream.write("Hello".as_bytes()).unwrap(); // 发送原始字节
// 接收服务器返回的消息
let mut buffer = [0; 5]; // 长度是 1024,初始化都为 0
stream.read(&mut buffer).unwrap; // 读消息
println!("Response from server : {:?}",
str::from_utf8(&buffer).unwrap() // 将接收到的原始字节,转化为 utf-8 字符串
);
}
重新运行
cargo run -p tcpserver
cargo run -p tcpclient
伊织 2024-05-09(四)凌晨