2015-10-07 22 views
0

我想打印TcpStream的()由peer_addr返回的地址,但鏽給出了錯誤:無法顯示()由peer_addr返回SocketAddr

error: the trait core::fmt::Display is not implemented for the type core::result::Result<std::net::addr::SocketAddr, std::io::error::Error> [E0277] src/main.rs:29 format!("New client {}", 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()); 
} 

回答

3

如果你讀了編譯器錯誤仔細,你可以看到,你的變量類型core::result::Result<std::net::addr::SocketAddr, std::io::error::Error>的。您需要將SocketAddr移出。遺憾的是,documentation沒有指定何時返回Err值。最簡單的辦法:

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

當然unwrap()的是邪惡的,你應該做的正確的錯誤處理!