Networking
Rust มี networking primitives ใน standard library สำหรับ TCP และ UDP และมี crates ที่ดีมากสำหรับ HTTP
ลองนึกภาพว่า Network เป็นเหมือน “ท่อส่งข้อมูล” ที่เชื่อมต่อ applications เข้าด้วยกัน Rust ทำให้เราควบคุมท่อเหล่านี้ได้อย่างละเอียดและปลอดภัย!
1. TCP Networking
Section titled “1. TCP Networking”1.1 TCP Server
Section titled “1.1 TCP Server”use std::net::{TcpListener, TcpStream};use std::io::{Read, Write, BufReader, BufRead};use std::thread;
fn handle_client(mut stream: TcpStream) { // ============================================ // peer_addr() - ดู address ของ client // ============================================ let peer = stream.peer_addr().unwrap(); println!("Client connected: {}", peer);
// ============================================ // Buffer สำหรับรับ data // ============================================ let mut buffer = [0; 1024];
loop { // ============================================ // read() - อ่าน data จาก client // Return จำนวน bytes ที่อ่านได้ // ============================================ match stream.read(&mut buffer) { Ok(0) => { // 0 bytes = connection closed println!("Client {} disconnected", peer); break; } Ok(n) => { let message = String::from_utf8_lossy(&buffer[..n]); println!("Received from {}: {}", peer, message.trim());
// ============================================ // write() - ส่ง response กลับ // ============================================ let response = format!("Echo: {}", message); stream.write(response.as_bytes()).unwrap(); stream.flush().unwrap(); } Err(e) => { println!("Error reading from {}: {}", peer, e); break; } } }}
fn main() -> std::io::Result<()> { // ============================================ // TcpListener::bind() - สร้าง server socket // ============================================ let listener = TcpListener::bind("127.0.0.1:8080")?; println!("Server listening on port 8080");
// ============================================ // incoming() - iterator ของ connections // ============================================ for stream in listener.incoming() { match stream { Ok(stream) => { // ============================================ // spawn thread สำหรับแต่ละ connection // ============================================ thread::spawn(|| { handle_client(stream); }); } Err(e) => println!("Connection error: {}", e), } }
Ok(())}เข้าสู่ระบบเพื่อดูเนื้อหาเต็ม
ยืนยันตัวตนด้วยบัญชี Google เพื่อปลดล็อกบทความทั้งหมด
Login with Google