Моя цель - прочитать несколько байтов из TcpStream, чтобы проанализировать данные в каждом сообщении и построить из него структуру.
loop {
let mut buf: Vec<u8> = Vec::new();
let len = stream.read(&mut buf)?;
if 0 == len {
//Disconnected
}
println!("read() -> {}", len);
}
Как и в Python, я думал, что stream.read()
заблокируетпока не получил некоторые данные. Поэтому я настроил сервер, который вызывает цикл, который вы видите выше, для каждого входящего соединения. Затем я попытался подключиться к серверу с Netcat;netcat успешно подключается к серверу и блокирует на stream.read()
, что я и хочу;но как только я отправлю некоторые данные, read()
вернет 0
. Я также пытался сделать что-то похожее с stream.read_to_end()
, но, похоже, он возвращается только при закрытом соединении.
Как я могу читать из TcpStream сообщение за сообщение, зная, что каждое сообщение может иметьдругой, неизвестный, размер?