我有一个结构:
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服务器,所以当我从TcpStream
获得新的TcpListener::bind
时,我会这样做:
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
调用时:
无法借用
*self
作为可变对象,因为self.cstream
也是如此 借用不可变[E0502]
完整代码:
如何更改内容以便我可以在循环中调用write_message
?
答案 0 :(得分:3)
如何将TcpStream提供给BufReader,然后将其取回?
impl<R: Read> BufReader<R> { fn into_inner(self) -> R }
展开此
BufReader
,返回基础读者。请注意,内部缓冲区中的任何剩余数据都将丢失。