summaryrefslogtreecommitdiffstats
path: root/src/bin/server.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/server.rs')
-rw-r--r--src/bin/server.rs66
1 files changed, 0 insertions, 66 deletions
diff --git a/src/bin/server.rs b/src/bin/server.rs
deleted file mode 100644
index 215d2ae..0000000
--- a/src/bin/server.rs
+++ /dev/null
@@ -1,66 +0,0 @@
1use std::io::{BufRead, BufReader, Write};
2use std::net::TcpListener;
3use std::thread;
4
5fn handle_client(stream: std::net::TcpStream) {
6 println!("Client connected");
7 let reader_stream = stream.try_clone().unwrap();
8 let reader = BufReader::new(reader_stream);
9 let mut writer = stream;
10 for line in reader.lines() {
11 let line = line.unwrap();
12 println!("Received: {}", line);
13 writeln!(writer, "{}", line).unwrap();
14 }
15 println!("Client disconnected");
16}
17
18fn main() {
19 let args: Vec<String> = std::env::args().collect();
20 let mut ip = "127.0.0.1".to_string();
21 let mut port = 8080;
22 let mut i = 1;
23 while i < args.len() {
24 if args[i] == "-p" {
25 if i + 1 < args.len() {
26 port = args[i + 1].parse::<u16>().unwrap_or_else(|_| {
27 eprintln!("Invalid port number: {}", args[i + 1]);
28 std::process::exit(1);
29 });
30 i += 2;
31 } else {
32 eprintln!("-p requires a port number");
33 std::process::exit(1);
34 }
35 } else if args[i] == "-i" {
36 if i + 1 < args.len() {
37 ip = args[i + 1].clone();
38 if ip != "127.0.0.1" && ip != "0.0.0.0" {
39 eprintln!("Invalid IP address: {}. Must be 127.0.0.1 or 0.0.0.0", ip);
40 std::process::exit(1);
41 }
42 i += 2;
43 } else {
44 eprintln!("-i requires an IP address");
45 std::process::exit(1);
46 }
47 } else {
48 eprintln!("Unknown argument: {}", args[i]);
49 std::process::exit(1);
50 }
51 }
52 let listener = match TcpListener::bind(format!("{}:{}", ip, port)) {
53 Ok(l) => l,
54 Err(e) => {
55 eprintln!("Failed to bind to {}:{}: {}", ip, port, e);
56 std::process::exit(1);
57 }
58 };
59 println!("Server listening on {}", listener.local_addr().unwrap());
60 for stream in listener.incoming() {
61 let stream = stream.unwrap();
62 thread::spawn(move || {
63 handle_client(stream);
64 });
65 }
66}