gpt4 book ai didi

memory-management - 我如何将 TcpStream 提供给 BufReader 然后又将其取回?

转载 作者:行者123 更新时间:2023-11-29 08:25:26 25 4
gpt4 key购买 nike

我有一个结构:

pub struct Paradise {
cstream: TcpStream,
}

用一个方法:

pub fn write_message(&mut self, code: i32, message: &str) {
let foo = format!("{} {}\r\n", code, message);
let _ = self.cstream.write(foo.as_bytes());
}

效果很好。它是一个 FTP 服务器,所以当我从 TcpListener::bind 获得一个新的 TcpStream 时,我会:

let mut p = Paradise::new(stream);
p.start();

在我调用的 start 方法中:

self.write_message(220, "Welcome to Paradise");

果然,我在 FTP 客户端中看到了该消息。到目前为止一切顺利。

但后来我做了:

let mut br = BufReader::new(&self.cstream);
loop {
let mut buffer = String::new();
let _ = br.read_line(&mut buffer);
println!("{:?}", buffer);
self.write_message(550, "Testing");
}

当我到达循环内的下一个 write_message 调用时:

cannot borrow *self as mutable because self.cstream is also borrowed as immutable [E0502]

完整代码:

https://github.com/andrewarrow/tinted_paradise/blob/169cc5f7025c417814f47a1fb3e3fc78ce4f9516/src/paradise.rs

https://github.com/andrewarrow/tinted_paradise/blob/169cc5f7025c417814f47a1fb3e3fc78ce4f9516/src/starter.rs

我如何改变周围的东西以便我可以在循环内调用 write_message

最佳答案

How do I give a TcpStream to a BufReader but then take it back?

调用 BufReader::into_inner :

impl<R: Read> BufReader<R> {
fn into_inner(self) -> R
}

Unwraps this BufReader, returning the underlying reader.

Note that any leftover data in the internal buffer is lost.

关于memory-management - 我如何将 TcpStream 提供给 BufReader 然后又将其取回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39067812/

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