无法显示peer_addr()返回的SocketAddr

时间:2015-10-07 21:52:39

标签: rust

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

  

错误:未对类型core::fmt::Display [E0277]实施特征core::result::Result<std::net::addr::SocketAddr, std::io::error::Error>   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 个答案:

答案 0 :(得分:3)

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

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

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