|
- 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<dyn std::error::Error>> {
- // 读取配置文件
- 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;
- }
- }
- }
- });
- }
- }
|