近日学习Substrate的开发入门,之前没有接触过Rust编程,今天跟着视频做个小项目练练手
项目目标:
编写一个Tcp server端与一个Tcp client端,客户端中输入内容后,服务端可以返回相应的输入内容
项目实现:
服务端的实现:
use std::net::{TcpListener, TcpStream};
use std::thread;
use std::time;
use std::io::{self, Read, Write};
fn handle_client(mut stream: TcpStream) -> io::Result<()> {
let mut buf = [0; 512];
loop {
let bytes_read = stream.read(&mut buf)?;
if bytes_read == 0 {
return Ok(());
}
stream.write(&buf[..bytes_read])?;
thread::sleep(time::Duration::from_secs(1));
}
}
fn main() -> io::Result<()> {
let listener = TcpListener::bind("127.0.0.1:8080")?;
let mut thread_vec: Vec<thread::JoinHandle<()>> = Vec::new();
for stream in listener.incoming() {
let stream = stream.expect("failed");
let handle = thread::spawn(move || {
handle_client(stream).unwrap_or_else(|error| eprintln!("{:?}", error));
});
thread_vec.push(handle);
}
for handle in thread_vec {
handle.join().unwrap();
}
Ok(())
}
客户端的实现:
use std::io::{self, prelude::*, BufReader, Write};
use std::net::TcpStream;
use std::str;
fn main() -> io::Result<()> {
let mut stream = TcpStream::connect("127.0.0.1:8080")?;
for _ in 0..10 {
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read!");
stream.write(input.as_bytes()).expect("Failed to write!");
let mut reader = BufReader::new(&stream);
let mut buffer: Vec<u8> = Vec::new();
reader.read_until(b'\n', &mut buffer).expect("Failed to read into buffer");
println!("read from server: {}", str::from_utf8(&buffer).unwrap());
println!("");
}
Ok(())
}
运行结果:
server端运行 cargo run
编译运行程序:
client端同样运行 cargo run
编译运行程序,可以看到来自服务端返回的消息,服务端读取了来自客户端输入的内容,并返回了读取内容
项目视频来自B站UP:程序员令狐壹冲
01Rust网络编程,实现TCP server:https://www.bilibili.com/video/BV1b54y1X7my
02Rust网络编程,Tcp client端:https://www.bilibili.com/video/BV1b54y1X7my?p=2
我不是UP本人,我不是UP本人,我不是UP本人,此博客为个人的学习笔记(手动狗头)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)