服务端
use std::thread;use std::net::{TcpListener, TcpStream, Shutdown};use std::io::{Read, Write};fn handle_client(mut stream: TcpStream) {let mut data = [0 as u8; 50]; // using 50 byte bufferwhile match stream.read(&mut data) {Ok(size) => {// echo everything!stream.write(&data[0..size]).unwrap();true},Err(_) => {println!("An error occurred, terminating connection with {}", stream.peer_addr().unwrap());stream.shutdown(Shutdown::Both).unwrap();false}} {}}fn main() {let listener = TcpListener::bind("0.0.0.0:3333").unwrap();// accept connections and process them, spawning a new thread for each oneprintln!("Server listening on port 3333");for stream in listener.incoming() {match stream {Ok(stream) => {println!("New connection: {}", stream.peer_addr().unwrap());thread::spawn(move|| {// connection succeededhandle_client(stream)});}Err(e) => {println!("Error: {}", e);/* connection failed */}}}// close the socket serverdrop(listener);}
客户端
use std::net::{TcpStream};use std::io::{Read, Write};use std::str::from_utf8;fn main() {match TcpStream::connect("localhost:3333") {Ok(mut stream) => {println!("Successfully connected to server in port 3333");let msg = b"Hello99999";stream.write(msg).unwrap();println!("Sent Hello, awaiting reply...");let mut data = [0 as u8; 10]; // using 6 byte buffermatch stream.read_exact(&mut data) {Ok(_) => {if &data == msg {println!("Reply is ok!");let text = from_utf8(&data).unwrap();println!("Unexpected reply: {}", text);} else {let text = from_utf8(&data).unwrap();println!("Unexpected reply: {}", text);}},Err(e) => {println!("Failed to receive data: {}", e);}}},Err(e) => {println!("Failed to connect: {}", e);}}println!("Terminated.");}
