A simple echo server (init)

This commit is contained in:
Stanislav N Mikhailov
2026-07-04 17:41:21 +03:00
commit 8f83f3cddc
5 changed files with 87 additions and 0 deletions
+6
View File
@@ -0,0 +1,6 @@
# Статус разработки проекта
## 📌 Текущее состояние
* **Где остановился:** Сервер успешно запускается и слушает сетевой сокет.
* **Проблема:** Не удалось проверить эхо-ответ через PowerShell.
* **Следующий шаг:** Найти рабочий способ отправки тестового запроса в PowerShell или использовать альтернативный инструмент.
+67
View File
@@ -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);
}
}
}
}