24个版本 (稳定版)
2.0.0 | 2024年1月18日 |
---|---|
1.4.1 | 2023年4月20日 |
1.4.0 | 2022年3月20日 |
1.3.2 | 2021年12月11日 |
0.1.0 | 2020年11月27日 |
#402 in 异步
每月 62 次下载
用于 5 个crate (3 直接)
10KB
177 行
基于aqueue actor的异步tcpclient。
- 版本 2.+ 最小支持的Rust版本:1.75或更高
DEMO URL
demo url
examples echo
#![feature(async_closure)]
use tcpclient::{TcpClient,SocketClientTrait};
use tokio::io::AsyncReadExt;
use std::error::Error;
use log::LevelFilter;
#[tokio::main]
async fn main()->Result<(),Box<dyn Error>> {
// set logger out
env_logger::Builder::new().filter_level(LevelFilter::Debug).init();
// connect echo server
let client =
TcpClient::connect("127.0.0.1:5555", async move |_, client, mut reader| {
// read buff from target server
let mut buff=[0;7];
while let Ok(len) = reader.read_exact(&mut buff).await {
// send buff to target server
println!("{}",std::str::from_utf8(&buff[..len])?);
client.send(&buff[..len]).await?;
}
// return true need disconnect,false not disconnect
// if true and the current state is disconnected, it will be ignored.
Ok(true)
}, ()).await?;
// connect ok send buff to target server
client.send(b"1234567").await?;
// test disconnect readline
let mut str = "".into();
std::io::stdin().read_line(&mut str)?;
// disconnect target server
client.disconnect().await?;
// wait env logger out show
std::io::stdin().read_line(&mut str)?;
Ok(())
}
依赖
~3–14MB
~121K SLoC