use tokio::net::TcpListener; use tokio::io::{AsyncReadExt, AsyncWriteExt}; use config::Config; fn check_ok_message(message: &[u8]) -> u8 { let message_str = String::from_utf8_lossy(message); if message_str.contains("OK") { 0xFF } else { 0x00 } } #[tokio::main] async fn main() -> Result<(), Box> { // 读取配置文件 let settings = Config::builder() .add_source(config::File::with_name("config")) .build()?; let address = settings.get_string("server.address")?; let port = settings.get_int("server.port")? as u16; let bind_address = format!("{}:{}", address, port); let listener = TcpListener::bind(&bind_address).await?; println!("Server listening on {}", bind_address); loop { let (mut socket, addr) = listener.accept().await?; println!("New client connected: {}", addr); tokio::spawn(async move { let mut buf = [0; 1024]; loop { match socket.read(&mut buf).await { Ok(0) => { println!("Client disconnected: {}", addr); return; } Ok(n) => { // Check message and send single bit response let response = check_ok_message(&buf[..n]); println!("接收到消息: {},响应: {}", String::from_utf8_lossy(&buf[..n]), response); if let Err(e) = socket.write_all(&[response]).await { println!("Failed to write to socket: {}", e); return; } } Err(e) => { println!("Failed to read from socket: {}", e); return; } } } }); } }