我在找一个Rust中的TCP服务器示例.

"hello world"或echo服务器都很好.

推荐答案

下面是一个使用std::net的非常简单的示例.它是针对当前的 rust 迹而开发的.*1而且

注意这个例子;它被简化了;如果绑定、侦听或接受产生错误,您可能不希望它惊慌失措.

use std::io::Write;
use std::net::TcpListener;
use std::thread;

fn main() {
    let listener = TcpListener::bind("127.0.0.1:9123").unwrap();
    println!("listening started, ready to accept");
    for stream in listener.incoming() {
        thread::spawn(|| {
            let mut stream = stream.unwrap();
            stream.write(b"Hello World\r\n").unwrap();
        });
    }
}

注意关于接受的范例;您必须自己启动accept()请求(在本例中,我们使用incoming()迭代器,每次只调用accept()),这样您就可以控制有哪些任务.

因此,我将实际的流处理代码放在了一个单独的线程中,但它不需要用于非常短的请求(这只意味着在处理第一个请求时,您将无法处理第二个请求);你也可以go 掉这两行的thread::spawn(|| { ... }).使用额外的线程也可以提供一定程度的隔离;如果线程展开,服务器作为一个整体不会死亡(但是请记住,在展开时内存不足或析构函数死机会导致整个服务器死亡).

Rust相关问答推荐

如何在tauri—leptos应用程序中监听后端值的变化?""

PyReadonlyArray2到Vec T<>

MacOS(AARCH64)上Ghidra中的二进制补丁导致进程终止

如何为utoipa中的可选查询参数生成OpenAPI模式?

铁 rust 中的共享对象实现特征

为什么TcpListener的文件描述符和生成的TcpStream不同?

如何使用Actix Web for Rust高效地为大文件服务

应为关联类型,找到类型参数

什么是`&;[][..]`铁 rust 里的刻薄?

为什么 `Deref` 没有在 `Cell` 上实现?

如何从宏调用闭包?

带引脚和不带引脚的比较功能

我可以用 Rust 编写一个不可变变量

Sized问题的动态调度迭代器Rust

实现泛型的 Trait 方法中的文字

切片不能被 `usize` 索引?

如何在 C++ 和 Rust 之间共享 pthread 同步原语?

在 Rust 中有条件地导入?

A 有一个函数,它在 Option<> 类型中时无法编译,但在 Option<> 类型之外会自行编译.为什么?

在 Rust 中组合特征的不同方法是否等效?