En un loop manda mensaje y espera respuesta.
Protocolo simple texto + \n
No está bien hacer esto de mandar mensaje y bloquearse hasta esperar respuesta.
use std::io::{BufRead, BufReader, stdin, Write};
use std::net::TcpStream;
use std::thread::sleep;
use std::time::{Duration, SystemTime};
use std::{env, io};
fn main() -> io::Result<()> {
let mut name = env::args().skip(1).next().expect("Falta parametro del nombre");
let mut stream = TcpStream::connect("127.0.0.1:12345")?;
println!("Conectado");
let mut reader = BufReader::new(stream.try_clone()?);
loop {
println!("Enviando");
stream.write_all(name.as_bytes())?;
stream.write_all(b"\\n")?;
let mut line:String = String::new();
reader.read_line(&mut line)?;
println!("Recibo: {}", line);
sleep(Duration::from_secs(1))
}
}
Hace el bind y por cada conexión entrante levanta un hilo.
Lee el socket y por cada mensaje imprime hello + mensaje.
use std::io::{BufRead, BufReader, Read, Write};
use std::net::{SocketAddr, TcpListener, TcpStream};
use std::thread;
fn main() {
let listener = TcpListener::bind("127.0.0.1:12345").unwrap();
println!("Esperando conexiones!");
for opt_stream in listener.incoming() {
if let Ok(mut stream) = opt_stream {
let addr = stream.peer_addr().unwrap();
println!("[{:?}] Cliente conectado", addr);
thread::spawn(move || receiver(stream, addr));
} else {
println!("Error al conectar")
}
}
}
fn receiver(mut stream: TcpStream, addr: SocketAddr) {
let mut reader = BufReader::new(stream.try_clone().expect(""));
loop {
let mut buffer = String::new();
if let Ok(read) = reader.read_line(&mut buffer) {
if read > 0 {
// Aca proceso el mensaje
println!("[{:?}] Hello {}", addr, buffer);
stream.write_all(format!("Hello {}", buffer).as_bytes())
.expect("");
} else {
println!("[{:?}] Goodbye!", addr);
break;
}
} else {
println!("[{:?}] Error leyendo socket!", addr);
break;
}
}
}