首页 文章

无法显示peer_addr()返回的SocketAddr

提问于
浏览
0

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

错误:trait core :: fmt :: Display未实现类型core :: result :: Result <std :: net :: addr :: SocketAddr,std :: io :: error :: Error> [E0277 ] src / main.rs:29格式!(“新客户{}”,stream.peer_addr());

根据documentation显示实现 .

代码如下:

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());
}

1 回答

  • 3

    如果仔细阅读编译器错误,可以看到您的变量属于 core::result::Result<std::net::addr::SocketAddr, std::io::error::Error> 类型 . 你需要从那里得到 SocketAddr . 遗憾的是,documentation没有指定何时返回 Err 值 . 最简单的解决方案:

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

    当然 unwrap() 是邪恶的,你应该在这里做正确的错误处理!

相关问题