面试题答案
一键面试use std::net::TcpStream;
use std::io::{Read, Write};
fn main() -> std::io::Result<()> {
let mut stream = TcpStream::connect("127.0.0.1:8080")?;
let mut buffer = [0; 1024];
let bytes_read = stream.read(&mut buffer)?;
let data = &buffer[..bytes_read];
println!("Read {} bytes: {:?}", bytes_read, data);
Ok(())
}
代码解释
-
连接到服务器:
let mut stream = TcpStream::connect("127.0.0.1:8080")?;
使用
TcpStream::connect
方法连接到指定的IP地址和端口。?
操作符用于处理Result
类型中的错误,如果连接失败,会返回错误并提前结束函数。 -
读取数据:
let mut buffer = [0; 1024]; let bytes_read = stream.read(&mut buffer)?; let data = &buffer[..bytes_read];
首先创建一个固定大小的缓冲区
buffer
,用于存储读取的数据。然后调用stream.read
方法从套接字中读取数据,该方法会将数据读取到buffer
中,并返回实际读取的字节数。同样,?
操作符用于处理可能出现的读取错误。最后,通过切片获取实际读取的数据。
错误处理
Result
类型:在Rust中,std::net::TcpStream
的方法通常返回Result
类型,其中Ok
包含成功的值,Err
包含错误信息。通过在方法调用后使用?
操作符,可以简洁地处理错误。如果发生错误,?
操作符会将错误值从函数中返回,使得错误可以在调用栈中向上传播。- 具体错误类型:可能遇到的错误类型主要是
std::io::Error
,它涵盖了各种I/O相关的错误,例如连接失败、读取超时等。在实际应用中,可以根据具体的错误类型进行更细致的处理,比如进行重试或记录详细的错误日志。