Как исправить проблему при отключении клиента?

на днях я решил сделать простой tcp чат, в котором сервер получает сообщения и выводит их в консоль, а клиент сообщения отправляет. Но возникла проблема, при отключении клиента, происходит ошибка, в консоль сервера отправляется пустота, которая заставляет ползунок консоли двигаться вниз с бешенной скоростью. При переподключении клиента к серваку обратно и отправки данных, в окне принимающей стороны ничего не происходит. Как это исправить?

server.rs

use std::net::*;
use std::io::*;
fn main(){
    let listener = TcpListener::bind("127.0.0.1:8081").unwrap();
    for stream in listener.incoming(){
       let mut stream = stream.unwrap();
         loop{
            let mut buf = vec![0u8;700];
            stream.read(&mut buf);
            buf.retain(|x| x != &0);
            let string = std::str::from_utf8(&buf).unwrap();
            println!("{string}")
        }

    }
}

client.rs

use std::io::*;
use std::net::TcpStream;
fn main(){
    let mut stream = TcpStream::connect("127.0.0.1:8081").unwrap();
    loop{
        let mut message = String::new();
        stdin().read_line(&mut message).unwrap();
        stream.write(message.as_bytes());

    }
}

Также интересно, как обработать отключение сервера от клиента. При этой ситуации, программа клиента паникует. Как сделать так, чтобы при отключении он просто вечным циклом пытался подключиться обратно?


Ответы (0 шт):