【发布时间】:2021-01-26 21:52:47
【问题描述】:
我正在尝试用 Rust 编写一个简单的 TCP 客户端,询问用户是否希望他们的连接是 SSL。我正在尝试尽可能多地抽象代码,因此我正在尝试编写一个“communicate_with_server”函数,该函数应该能够接收SslStream 或TcpStream。
fn communicate_with_server<T: std::io::Read + std::io::Write>(mut stream: T) {
let initial_message = format!("hello world");
let mut buffer: Vec<u8> = Vec::new();
let _bytes_written = stream.write_all(initial_message.as_bytes());
let _flush = stream.flush();
loop {
let mut stream_reader = BufReader::new(&stream);
stream_reader.read_until(b'\n', &mut buffer).expect("Reading into buffer failed");
// ... Wait for the server to respond and do some analysis on the response ...
}
}
当我尝试编译这段代码时,我得到以下响应:
error[E0277]: the trait bound `&T: std::io::Read` is not satisfied
--> src\main.rs:47:48
|
47 | let mut stream_reader = BufReader::new(&stream);
| -^^^^^^
| |
| the trait `std::io::Read` is not implemented for `&T`
| help: consider removing the leading `&`-reference
|
= note: required by `BufReader::<R>::new`
error[E0599]: no method named `read_until` found for struct `BufReader<&T>` in the current scope
--> src\main.rs:49:23
|
49 | stream_reader.read_until(b'\n', &mut buffer).expect("Reading into buffer failed");
| ^^^^^^^^^^ method not found in `BufReader<&T>`
|
考虑到第一个错误,第二个错误是有道理的,但我不太确定为什么 &T 没有实现 Read 特征。
【问题讨论】:
标签: generics methods rust reference traits