以下の内容はhttps://ryuichi1208.hateblo.jp/entry/2025/01/08/120932より取得しました。


【Rust】TCPのエコーサーバを書く

仕事で使うわけでは今のところないけど触ってみてる。コンパイルエラーが凄くてそれ通りに書いていくと動くというのが良かった。cargoコマンドも少ししか触っていないけど便利。マスコットキャラクターのカニが可愛い。

Linuxにも入っていてるらしいのでとても楽しみ。

ソースコード

AIが優秀というのもあるけど出てくるコード自体は理解がしやすくて書きやすかった。ただ所有権とか出てくる手前で多分ここから難しくなっていくんだろうなと思ったりした。 Firecrackerのコードを読めるくらいにはRustに慣れておきたいので読んで書いてをやっていく。

use std::net::{TcpListener, TcpStream};
use std::io::{Read, Write};
use std::thread;

fn handle_client(mut stream: TcpStream) {
    let mut buffer = [0; 512];

    loop {
        match stream.read(&mut buffer) {
            Ok(0) => {
                println!("Client disconnected");
                break;
            }
            Ok(n) => {
                println!("Received: {}", String::from_utf8_lossy(&buffer[..n]));
                if let Err(e) = stream.write_all(&buffer[..n]) {
                    eprintln!("Failed to send data: {}", e);
                    break;
                }
            }
            Err(e) => {
                eprintln!("Error reading from stream: {}", e);
                break;
            }
        }
    }
}

fn main() -> std::io::Result<()> {
    let listener = TcpListener::bind("127.0.0.1:8080")?;

    println!("Server running on 127.0.0.1:8080");

    for stream in listener.incoming() {
        match stream {
            Ok(stream) => {
                thread::spawn(move || handle_client(stream));
            }
            Err(e) => {
                eprintln!("Connection failed: {}", e);
            }
        }
    }

    Ok(())
}



以上の内容はhttps://ryuichi1208.hateblo.jp/entry/2025/01/08/120932より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14