demo_async_tcp/
demo-async-tcp.rs1use rndz::tcp::AsyncClient;
2use rndz::tcp::Server;
3use std::error::Error;
4use std::time::Duration;
5use tokio::{
6 io::{AsyncReadExt, AsyncWriteExt},
7 task::spawn,
8 time::sleep,
9};
10
11#[tokio::main]
12async fn main() -> Result<(), Box<dyn Error>> {
13 let server_addr = "127.0.0.1:8888";
14
15 {
16 let server_addr = server_addr.clone();
17 spawn(async move { Server::new(server_addr).await?.run().await });
18 }
19
20 let t = {
21 let server_addr = server_addr.clone();
22 spawn(async move {
23 let mut c = AsyncClient::new(server_addr, "c1", None).unwrap();
24 loop {
25 match c.listen().await {
26 Ok(_) => {
27 let (mut s, _) = c.accept().await.unwrap();
28 s.write(b"hello").await.unwrap();
29 break;
30 }
31 _ => {
32 sleep(Duration::from_secs(1)).await;
33 continue;
34 }
35 }
36 }
37 })
38 };
39
40 let mut c = AsyncClient::new(server_addr, "c2", None)?;
41 let mut s = loop {
42 match c.connect("c1").await {
43 Ok(s) => break s,
44 _ => sleep(Duration::from_secs(1)).await,
45 }
46 };
47
48 let mut buf = [0u8; 5];
49 s.read(&mut buf).await?;
50
51 t.await?;
52
53 Ok(())
54}