我正在尝试打印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 回答
如果仔细阅读编译器错误,可以看到您的变量属于
core::result::Result<std::net::addr::SocketAddr, std::io::error::Error>
类型 . 你需要从那里得到SocketAddr
. 遗憾的是,documentation没有指定何时返回Err
值 . 最简单的解决方案:当然
unwrap()
是邪恶的,你应该在这里做正确的错误处理!