ptth/prototypes/quic_demo/src/bin/quic_demo_client.rs

36 lines
1.1 KiB
Rust

use quic_demo::prelude::*;
#[tokio::main]
async fn main () -> anyhow::Result <()> {
tracing_subscriber::fmt::init ();
let server_cert = tokio::fs::read ("quic_server.crt").await?;
let server_addr = "127.0.0.1:30380".parse ()?;
let endpoint = make_client_endpoint ("0.0.0.0:0".parse ()?, &[&server_cert])?;
debug! ("Connecting to relay server");
let quinn::NewConnection {
connection,
..
} = endpoint.connect (&server_addr, "localhost")?.await?;
debug! ("Connecting to end server");
let (mut send, mut recv) = connection.open_bi ().await?;
let mut buf = vec! [0u8; 65_536];
let mut send_interval = tokio::time::interval (Duration::from_millis (1000));
// send_interval.set_missed_tick_behavior (tokio::time::MissedTickBehavior::Skip);
loop {
send_interval.tick ().await;
send.write_all (b"Hi!\n").await?;
let bytes_read = recv.read (&mut buf).await?.ok_or_else (|| anyhow::anyhow! ("Server or relay closed connection"))?;
let buf_slice = &buf [0..bytes_read];
let s = std::str::from_utf8 (buf_slice)?;
println! ("Received: `{}`", s);
}
}