Trait std::net::ToSocketAddrs 1.0.0[−][src]
pub trait ToSocketAddrs { type Iter: Iterator<Item = SocketAddr>; fn to_socket_addrs(&self) -> Result<Self::Iter>; }
Expand description
trait,用于可以转换或解析为一个或多个 SocketAddr
值的对象。
trait 在构造网络对象时用于泛型地址解析。默认情况下,它针对以下类型实现:
-
SocketAddr
:to_socket_addrs
是标识函数。 -
SocketAddrV4
,SocketAddrV6
,(
IpAddr
,
u16
)
,(
Ipv4Addr
,
u16
)
,(
Ipv6Addr
,
u16
)
:to_socket_addrs
简单地创建一个SocketAddr
。 -
(
&str
,
u16
)
:&str
应该是FromStr
实现所期望的IpAddr
地址的字符串表示形式,或者是主机名。u16
是端口号。 -
&str
: 该字符串应该是SocketAddr
实现所期望的SocketAddr
的字符串表示形式,或者是<host_name>:<port>
对之类的字符串,其中<port>
是u16
值。
trait 允许使用 bind/connection 地址的各种类型的值轻松构造 TcpStream
或 UdpSocket
之类的网络对象。
之所以需要它,是因为有时一种类型比另一种类型更合适: 对于简单的用法,像 "localhost:12345"
这样的字符串比相应的 SocketAddr
的手工构造好得多,但是有时 SocketAddr
值是地址的 * 主要来源,并将其转换为其他一些类型 (例如,字符串) 仅用于在构造函数方法中将其转换回 SocketAddr
是没有意义的。
操作系统返回的不是 IP 地址的地址将被静默忽略。
Examples
创建一个产生一个项的 SocketAddr
迭代器:
use std::net::{ToSocketAddrs, SocketAddr}; let addr = SocketAddr::from(([127, 0, 0, 1], 443)); let mut addrs_iter = addr.to_socket_addrs().unwrap(); assert_eq!(Some(addr), addrs_iter.next()); assert!(addrs_iter.next().is_none());Run
从主机名创建 SocketAddr
迭代器:
use std::net::{SocketAddr, ToSocketAddrs}; // 假设 'localhost' 解析为 127.0.0.1 let mut addrs_iter = "localhost:443".to_socket_addrs().unwrap(); assert_eq!(addrs_iter.next(), Some(SocketAddr::from(([127, 0, 0, 1], 443)))); assert!(addrs_iter.next().is_none()); // 假设 'foo' 无法解析 assert!("foo:443".to_socket_addrs().is_err());Run
创建一个产生多个项的 SocketAddr
迭代器:
use std::net::{SocketAddr, ToSocketAddrs}; let addr1 = SocketAddr::from(([0, 0, 0, 0], 80)); let addr2 = SocketAddr::from(([127, 0, 0, 1], 443)); let addrs = vec![addr1, addr2]; let mut addrs_iter = (&addrs[..]).to_socket_addrs().unwrap(); assert_eq!(Some(addr1), addrs_iter.next()); assert_eq!(Some(addr2), addrs_iter.next()); assert!(addrs_iter.next().is_none());Run
尝试从格式不正确的套接字地址 &str
(缺少端口) 创建 SocketAddr
迭代器:
use std::io; use std::net::ToSocketAddrs; let err = "127.0.0.1".to_socket_addrs().unwrap_err(); assert_eq!(err.kind(), io::ErrorKind::InvalidInput);Run
TcpStream::connect
是一个函数的示例,该函数在其参数上利用 ToSocketAddrs
作为 trait bound 来接受不同的类型:
use std::net::{TcpStream, Ipv4Addr}; let stream = TcpStream::connect(("127.0.0.1", 443)); // or let stream = TcpStream::connect("127.0.0.1:443"); // or let stream = TcpStream::connect((Ipv4Addr::new(127, 0, 0, 1), 443));Run
Associated Types
type Iter: Iterator<Item = SocketAddr>
[src]
type Iter: Iterator<Item = SocketAddr>
[src]在此类型可能对应的套接字地址上返回的迭代器。
Required methods
fn to_socket_addrs(&self) -> Result<Self::Iter>
[src]
fn to_socket_addrs(&self) -> Result<Self::Iter>
[src]将此 object 转换为解析的 SocketAddr
的迭代器。
根据执行的任何解析的结果,返回的迭代器实际上可能不会产生任何值。
请注意,执行解析时,此函数可能会阻塞当前线程。