gpt4 book ai didi

rust - 如何从 Rust 中的 SockAddr 获取 IP 地址的字节表示?

转载 作者:行者123 更新时间:2023-11-29 08:25:12 27 4
gpt4 key购买 nike

调用函数 recv_from()返回一个(长度,SocketAddr)元组。此枚举没有方法将 IP 地址提取为字节数组,但它确实包含 IpAddr。可以通过 ip() 获得的枚举功能。 IpAddr 包含一个 Ipv4AddrIpv6Addr 结构,它有一个名为 octets() 的函数这正是我需要的。是否可以从 SocketAddr 访问它?

最佳答案

是的,您可以,但最终您需要考虑地址可能是 v4 或 v6 的事实,并使用模式匹配进行相应处理。基本上:

match sa.ip() {
IpAddr::V4(ip) => /* something with ip.octets() which is a [u8; 4] */,
IpAddr::V6(ip) => /* something with ip.octets() which is a [u8; 16] */,
}

例如,如果你想对 future 不友好,你可以

let octets = match sa.ip() {
IpAddr::V4(ip) => Ok(ip.octets()),
_ => Err("Not an IPv4 Address"),
};

它为 v4 地址返回一个成功的结果,但在 v6 地址上返回错误。我不太了解 Rust,但看起来在这两种情况下处理 octets() 返回值之间的类型差异的唯一真正正确的方法是将结果包装在你自己的枚举,或者通过仅使用适当模式匹配中的八位字节来避免它。

关于rust - 如何从 Rust 中的 SockAddr 获取 IP 地址的字节表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46860928/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com