【Rust】TCP Stream

なるほど、接続状態が維持されているのがわかる。

use std::net::{TcpListener, TcpStream};
use std::thread;

use std::io::{Read,Write,Error};

fn sendRecv(mut stream: TcpStream) -> Result<(), Error>
{
    println!("Connection from: {}", stream.peer_addr()?);
    let mut buf = [0; 512];
    loop {
        let byte_read = stream.read(&mut buf)?;
        if byte_read == 0{return Ok(());} else {
            let msg = format!("MESSAGE:");
            stream.write(msg.as_bytes()).expect("SEND FAILURE!!!");
        }

        stream.write(&buf[..byte_read])?;
    }
}

fn main() {
    let args: Vec<String> = std::env::args().collect();

    let coninfo = args[1].to_string() + ":" + &args[2];
    let listener = TcpListener::bind(coninfo).expect("COuld not bind");
    for stream in listener.incoming(){
        match stream {
            Err(e) => {eprintln!("failed: {}", e)}
            Ok(stream) => 
            {
                thread::spawn(move || {
                    sendRecv(stream).unwrap_or_else(|error| eprintln!("{:?}", error));
                });
            }
        }
    }
    println!("hello world");
}

Running `target/debug/sample 192.168.33.10 8000`
Connection from: 192.168.33.10:55828

$ nc 192.168.33.10 8000
hello
MESSAGE:hello