Skip to content
เข้าสู่ระบบ

Networking

Rust มี networking primitives ใน standard library สำหรับ TCP และ UDP และมี crates ที่ดีมากสำหรับ HTTP

ลองนึกภาพว่า Network เป็นเหมือน “ท่อส่งข้อมูล” ที่เชื่อมต่อ applications เข้าด้วยกัน Rust ทำให้เราควบคุมท่อเหล่านี้ได้อย่างละเอียดและปลอดภัย!

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 เพื่อปลดล็อกบทความทั้งหมด