-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtokio-tcp-stream-console-logger.rs
69 lines (60 loc) · 2.01 KB
/
tokio-tcp-stream-console-logger.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
use logged_stream::ConsoleLogger;
use logged_stream::DefaultFilter;
use logged_stream::LoggedStream;
use logged_stream::LowercaseHexadecimalFormatter;
use std::env;
use tokio::io::AsyncReadExt;
use tokio::io::AsyncWriteExt;
use tokio::net;
async fn handle_connection(mut stream: net::TcpStream) {
loop {
let mut read = [0; 1028];
match stream.read(&mut read).await {
Ok(n) => {
stream.write_all(&read[0..n]).await.unwrap();
}
Err(err) => panic!("{err}"),
}
}
}
#[tokio::main(flavor = "multi_thread", worker_threads = 4)]
async fn main() {
env::set_var("RUST_LOG", "debug");
env_logger::builder()
.default_format()
.format_timestamp_millis()
.init();
let listener = net::TcpListener::bind("127.0.0.1:8080").await.unwrap();
tokio::spawn(async move {
loop {
match listener.accept().await {
Ok((stream, _addr)) => {
tokio::spawn(handle_connection(stream));
}
Err(err) => panic!("{err}"),
}
}
});
let mut client = LoggedStream::new(
net::TcpStream::connect("127.0.0.1:8080").await.unwrap(),
LowercaseHexadecimalFormatter::new_default(),
DefaultFilter,
ConsoleLogger::new_unchecked("debug"),
);
let send = [0x01, 0x02, 0x03, 0x04];
client.write_all(&send).await.unwrap();
let mut response = [0u8; 4];
client.read_exact(&mut response).await.unwrap();
let send = [0x05, 0x06, 0x07, 0x08];
client.write_all(&send).await.unwrap();
let mut response = [0u8; 4];
client.read_exact(&mut response).await.unwrap();
let send = [0x09, 0x0a, 0x0b, 0x0c];
client.write_all(&send).await.unwrap();
let mut response = [0u8; 4];
client.read_exact(&mut response).await.unwrap();
let send = [0x01, 0x02, 0x03, 0x04];
client.write_all(&send).await.unwrap();
let mut response = [0u8; 4];
client.read_exact(&mut response).await.unwrap();
}