feat: update quinn
This commit is contained in:
@@ -1,8 +1,10 @@
|
|||||||
use std::{error::Error, net::SocketAddr};
|
use std::{error::Error, net::SocketAddr};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
use std::time::Duration;
|
||||||
|
|
||||||
use futures_util::stream::StreamExt;
|
use futures_util::stream::StreamExt;
|
||||||
use quinn::{ClientConfig, Endpoint, Incoming, ServerConfig};
|
use quinn::{ClientConfig, Endpoint, Incoming, ServerConfig};
|
||||||
|
use tokio::time::sleep;
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<(), Box<dyn Error>> {
|
async fn main() -> Result<(), Box<dyn Error>> {
|
||||||
@@ -36,11 +38,25 @@ fn run_server(addr: SocketAddr) -> Result<Vec<u8>, Box<dyn Error>> {
|
|||||||
let (mut incoming, server_cert) = make_server_endpoint(addr)?;
|
let (mut incoming, server_cert) = make_server_endpoint(addr)?;
|
||||||
// accept a single connection
|
// accept a single connection
|
||||||
tokio::spawn(async move {
|
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!(
|
println!(
|
||||||
"[server] incoming connection: addr={}",
|
"[server] incoming connection: addr={}",
|
||||||
connection.remote_address()
|
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)
|
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 connect = endpoint.connect(server_addr, "localhost").unwrap();
|
||||||
let quinn::NewConnection { connection, .. } = connect.await.unwrap();
|
let quinn::NewConnection { connection, .. } = connect.await.unwrap();
|
||||||
println!("[client] connected: addr={}", connection.remote_address());
|
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(
|
pub fn make_client_endpoint(
|
||||||
|
|||||||
Reference in New Issue
Block a user