commit 8f83f3cddcc174ff5f5398bd80a1aa8985c9f35f Author: Stanislav N Mikhailov Date: Sat Jul 4 17:41:21 2026 +0300 A simple echo server (init) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..6e68eee --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "nocloud-core" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..d6d35e5 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "nocloud-core" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/src/main.MD b/src/main.MD new file mode 100644 index 0000000..7e9bce4 --- /dev/null +++ b/src/main.MD @@ -0,0 +1,6 @@ +# Статус разработки проекта + +## 📌 Текущее состояние +* **Где остановился:** Сервер успешно запускается и слушает сетевой сокет. +* **Проблема:** Не удалось проверить эхо-ответ через PowerShell. +* **Следующий шаг:** Найти рабочий способ отправки тестового запроса в PowerShell или использовать альтернативный инструмент. diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..6a11fac --- /dev/null +++ b/src/main.rs @@ -0,0 +1,67 @@ +use std::{env, io::{self, Read, Write}, net::{TcpListener, TcpStream}, thread}; + +fn handle_client (mut stream: TcpStream) { + let peer_addr = stream + .peer_addr() + .map_or_else(|_| "uncnown".to_string(), |addr| addr.to_string()); + println!("Handling connection from: {}", peer_addr); + + let mut buffer = [0;1024]; + + loop { + match stream.read(&mut buffer) { + Ok(n) => { + if n ==0 { + println!("client {} closed connection",peer_addr); + break; + } + + if let Err (e) = stream.write_all(&buffer) { + eprintln!("Write error to client {}: {}", peer_addr, e + ); + break; + } + } + + Err(e) if e.kind() == io::ErrorKind::Interrupted => continue, + Err(e) => { + match e.kind() { + io::ErrorKind::ConnectionReset => { + println!("Клиент {} Сбросил соединение", peer_addr); + } + _ => { + eprintln!("Read Error frop client {}: {}", + peer_addr, + e + ); + } + + } + } + } + } +} + +fn main() { + let addr = env::args() + .nth(1) + .unwrap_or_else(||"127.0.0.1:32768".to_string()); + + let listener = TcpListener::bind(&addr) + .expect("Failed to bind to address"); + println!("Server listening om {}", addr); + + for stream_result in listener.incoming() { + match stream_result { + Ok(stream) => { + thread::spawn(move || { + handle_client(stream); + }); + } + Err(e) => { + eprintln!("Failed to accept connection {}",e); + } + } + } + +}