Я пытаюсь создать эхо-сервер с прописной строкой, когда он отвечает, для тренировки с токио в качестве упражнения.Я использовал массив в качестве буфера, что раздражает, потому что, если строка переполняет буфер?
Я хотел бы знать, есть ли лучший способ для этого без использования массива, в идеале просто с помощью Строка или вектор без необходимости создания буферного массива.
Я попытался read_from_string (), но не async и заканчивает тем, что блокировал сокет.
extern crate tokio;
use tokio::net::TcpListener;
use tokio::prelude::*;
fn main() {
let addr = "127.0.0.1:6142".parse().unwrap();
let listener = TcpListener::bind(&addr).unwrap();
let server = listener
.incoming()
.for_each(|socket| {
let (mut reader, mut writer) = socket.split();
let mut buffer = [0; 16];
reader.poll_read(&mut buffer)?;
let s = std::str::from_utf8(&buffer).unwrap();
s.to_uppercase();
writer.poll_write(&mut s.as_bytes())?;
Ok(())
})
.map_err(|e| {
eprintln!("something went wrong {}", e);
});
tokio::run(server);
}
Результаты: «012345678901234567890» становится -> «0123456789012345»
Я мог бы, конечно, увеличить буфер, но он просто пнул бы по дороге.