面试题答案
一键面试在Rust中,TcpStream::connect
方法返回一个Result<TcpStream, std::io::Error>
。我们可以通过match
语句或者?
操作符来处理错误。
- 使用
match
语句处理错误:
use std::net::TcpStream;
fn main() {
let result = TcpStream::connect("127.0.0.1:8080");
match result {
Ok(stream) => {
println!("成功连接到服务器");
// 在这里进行后续的读写操作
}
Err(e) => {
if e.kind() == std::io::ErrorKind::AddrNotAvailable {
println!("网络不可达");
} else if e.kind() == std::io::ErrorKind::AddrInUse {
println!("端口被占用");
} else {
println!("其他错误: {:?}", e);
}
}
}
}
- 使用
?
操作符处理错误:
use std::net::TcpStream;
use std::io::{self, ErrorKind};
fn connect_to_server() -> Result<(), io::Error> {
let stream = TcpStream::connect("127.0.0.1:8080")?;
println!("成功连接到服务器");
// 在这里进行后续的读写操作
Ok(())
}
fn main() {
match connect_to_server() {
Ok(()) => (),
Err(e) => {
if e.kind() == ErrorKind::AddrNotAvailable {
println!("网络不可达");
} else if e.kind() == ErrorKind::AddrInUse {
println!("端口被占用");
} else {
println!("其他错误: {:?}", e);
}
}
}
}
在上述示例中,match
语句和?
操作符都可以用来处理TcpStream::connect
可能返回的错误。match
语句提供了一种更详细的方式来处理不同类型的错误,而?
操作符则更加简洁,适用于将错误返回给调用者的情况。同时,通过io::ErrorKind
可以判断具体的错误类型,如网络不可达(AddrNotAvailable
)、端口被占用(AddrInUse
)等。