use anyhow::Result; use async_trait::async_trait; use netsim_embed_cli::{run_client, Client}; use std::net::{Ipv4Addr, SocketAddrV4, UdpSocket}; pub struct UdpClient; #[async_trait] impl Client for UdpClient { async fn run(&mut self, addr: Ipv4Addr) -> Result<()> { let bind_addr = SocketAddrV4::new(Ipv4Addr::UNSPECIFIED, 0); let socket = async_io::Async::::bind(bind_addr)?; socket .send_to(b"ping", SocketAddrV4::new(addr, 3000)) .await?; let mut buf = [0u8; 11]; let (len, _addr) = socket.recv_from(&mut buf).await?; assert_eq!(&buf[..len], b"pong"); println!("received pong"); Ok(()) } } #[async_std::main] async fn main() -> Result<()> { run_client(UdpClient).await }