关于rust:无法显示peer_addr()返回的SocketAddr

Cannot display a SocketAddr returned by peer_addr()

我正在尝试打印TcpStream的peer_addr()返回的地址,但Rust给出了错误:

error: the trait core::fmt::Display is not implemented for the type core::result::Result [E0277]
src/main.rs:29 format!("New client {}", stream.peer_addr());

根据文档显示实现。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use std::net::{TcpListener, TcpStream};
use std::thread;

fn main()
{
    let listener = TcpListener::bind("127.0.0.1:80").unwrap();

    for stream in listener.incoming() {
        match stream {
            Ok(stream) => {
                thread::spawn(move|| {
                    // connection succeeded
                    handle_client(stream)
                });
            }
            Err(e) => {
                println!("Accept err {}", e);
            }
        }
    }

    // close the socket server
    drop(listener);
}

fn handle_client(stream: TcpStream) {
    println!("New client {}", stream.peer_addr());
}

如果仔细阅读了编译器错误,您会发现变量的类型为core::result::Result。 您需要将SocketAddr从那里拿走。 遗憾的是,文档未指定何时返回Err值。 最简单的解决方案:

1
println!("New client {}", stream.peer_addr().unwrap());

当然unwrap()是邪恶的,您应该在此处进行适当的错误处理!