1

私は構造体を持っています:

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 サーバーなので、新しいサーバーを取得するときは次のようTcpStreamTcpListener::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]

完全なコード:

https://github.com/andrewarrow/tinted_pa​​radise/blob/169cc5f7025c417814f47a1fb3e3fc78ce4f9516/src/paradise.rs

https://github.com/andrewarrow/tinted_pa​​radise/blob/169cc5f7025c417814f47a1fb3e3fc78ce4f9516/src/starter.rs

ループ内で呼び出すことができるように、どうすれば変更できますか?write_message

4

1 に答える 1

4

TcpStream を BufReader に渡してから戻すにはどうすればよいですか?

呼び出すことによってBufReader::into_inner

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

thisBufReaderをアンラップし、基礎となるリーダーを返します。

内部バッファに残っているデータは失われることに注意してください。

于 2016-08-21T19:15:31.770 に答える