1. 构建TCP Server
具体来说就是要编写一个TCP Server 和 Client,然后让他们通信
先创建一个文件夹并打开
cargo new s1 && cd s1
再创建两个文件夹
cargo new tcpserver
cargo new tcpclient
s1实际上是一个工作工作空间,可以容纳多个Rust项目,它可以将多个Rust项目作为一个单元来管理
我们改一下Cargo.toml中的内容
[workspace]
members = ["tcpserver","tcpclient"]
1.1 建立tcpserver
我们在main文件中编写如下代码,并在终端运行
/Users/qinjianquan/s1/tcpserver/src/main.rs
use std::net::TcpListener;
fn main() {
let listener = TcpListener::bind("127.0.0.1:3000").unwrap();
println!(Running on port 3000...);
for stream in listener.incoming(){
let _stream = stream.unwrap();
println!("connection established")
}
}
cargo run -p tcpserver
Running on port 3000...
1.2 建立tcpclient
在下列文件中输入
/Users/qinjianquan/s1/tcpclient/src/main.rs
use std::net::TcpStream;
fn main() {
let _stream = TcpStream::connect("localhost:3000").unwrap();
}
在另一个终端中运行,然后查看第一个终端,会发现连接已经建立
cargo run -p tcpclient
connection established
1.3 发送和接收数据
use std::{net::TcpListener, io::{Read, Write}};
fn main() {
let listener = TcpListener::bind("127.0.0.1:3000").unwrap();
println!("Running on port 3000...");
for stream in listener.incoming(){
let mut stream = stream.unwrap();
println!("connection established");
let mut buffer = [0; 1024];
stream.read(&mut buffer).unwrap();
stream.write(&mut buffer).unwrap();
}
}
use std::io::{Read,Write};
use std::net::TcpStream;
use std::str;
fn main() {
//connect and send "Hello"
let mut stream = TcpStream::connect("localhost:3000").unwrap();
stream.write("Hello".as_bytes()).unwrap();
let mut buffer= [0; 5];
stream.read(&mut buffer).unwrap();
println!(
"Response from server:{:?}",
str::from_utf8(&buffer).unwrap()
);
}
编写好代码以后,在两个终端中分别运行,具体结果如下
cargo run -p tcpserver
Running on port 3000...
connection established
cargo run -p tcpclient
Response from server:"hello"