なるほど、接続状態が維持されているのがわかる。
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