diff --git a/__network/quinn/src/main.rs b/__network/quinn/src/main.rs index 19f2bb7..36ed941 100644 --- a/__network/quinn/src/main.rs +++ b/__network/quinn/src/main.rs @@ -1,8 +1,10 @@ use std::{error::Error, net::SocketAddr}; use std::sync::Arc; +use std::time::Duration; use futures_util::stream::StreamExt; use quinn::{ClientConfig, Endpoint, Incoming, ServerConfig}; +use tokio::time::sleep; #[tokio::main] async fn main() -> Result<(), Box> { @@ -36,11 +38,25 @@ fn run_server(addr: SocketAddr) -> Result, Box> { let (mut incoming, server_cert) = make_server_endpoint(addr)?; // accept a single connection tokio::spawn(async move { - let quinn::NewConnection { connection, .. } = incoming.next().await.unwrap().await.unwrap(); + let quinn::NewConnection { + connection, + mut bi_streams, + .. + } = incoming.next().await.unwrap().await.unwrap(); println!( "[server] incoming connection: addr={}", connection.remote_address() ); + while let Some(Ok((_send, mut recv))) = bi_streams.next().await { + let mut buff = [0_u8; 32]; + match recv.read(&mut buff).await { + Ok(None) => { break; } + Ok(Some(n)) => { + println!("Received: {:x?}", &buff[..n]); + } + Err(e) => { println!("Error: {:?}", e); } + } + } }); Ok(server_cert) @@ -51,6 +67,9 @@ async fn run_client(endpoint: &Endpoint, server_addr: SocketAddr) { let connect = endpoint.connect(server_addr, "localhost").unwrap(); let quinn::NewConnection { connection, .. } = connect.await.unwrap(); println!("[client] connected: addr={}", connection.remote_address()); + let (mut send, _recv) = connection.open_bi().await.unwrap(); + send.write_all(b"hello world").await.unwrap(); + sleep(Duration::from_millis(500)).await; } pub fn make_client_endpoint(