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