gpt4 book ai didi

rust - 在Rust中使用 `tokio-ruSTLs`从TlsStream 读取

转载 作者:行者123 更新时间:2023-12-03 11:43:16 27 4
gpt4 key购买 nike

我正在使用rustls,并且想要像读取TlsStream一样将TcpStream读取到缓冲区中。这是我在做什么:

let acceptor = TlsAcceptor::from(Arc::new(config));

let fut = async {

let mut listener = TcpListener::bind(&addr).await?;

loop {

let (stream, peer_addr) = listener.accept().await?;
let acceptor = acceptor.clone();

let fut = async move {

let mut stream = acceptor.accept(stream).await?;

//// CURRENTLY THIS .read() is throwing error in compiler
println!("Stream: {:?}", stream.read(&mut [0; 1024]));

Ok(()) as io::Result<()>
};

handle.spawn(fut.unwrap_or_else(|err| eprintln!("{:?}", err)));
}
};

引发错误
'error[E0599]: no method named `read` found for struct `tokio_rustls::server::TlsStream<tokio::net::tcp::stream::TcpStream>` in the current scope'

我想读取使用 TlsStream生成的 tokio-rustls进行缓冲。

最佳答案

正如您的错误消息所描述的那样,有一个为该类型实现的特征 AsyncReadExt ,但未导入到范围中。为了能够使用该特征的 read 方法,您需要导入该特征。对于此特征,通常通过导入tokio prelude来完成:

use tokio::prelude::*;

// or you can explicitly import just AsyncReadExt, but I'd recommend the above
use tokio::io::AsyncReadExt;

另外,您需要从 await中专门对结果进行 read(),因为它返回了将来。您还需要在单独的变量中使用缓冲区,因为这是读取数据的存储位置。

let mut buffer = [0; 1024];
let byte_count = stream.read(&mut buffer).await;
// ^^^^^^
println!("Stream: {:?}", &buffer[0..byte_count]);

关于rust - 在Rust中使用 `tokio-ruSTLs`从TlsStream <TcpStream>读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61388037/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com