2个不稳定版本
0.2.1 | 2022年6月24日 |
---|---|
0.2.0 |
|
0.1.0 | 2022年5月26日 |
#4 在 #socket-address
22KB
269 行
to-socket-addrs
一个用于指定不带端口的地址的小型替代品 std::net::ToSocketAddrs
。
用法
要使用此包,将 to-socket-addrs
添加到项目的 Cargo.toml
依赖中
[dependencies]
to-socket-addrs = "0.2"
之后,只需使用 ToSocketAddrsWithDefaultPort
代替 std::net::ToSocketAddrs
,并在创建流或监听器时使用 .with_default_port(...)
指定默认端口号。
也支持异步版本(如果启用了相应功能)
- 使用
ToSocketAddrsWithDefaultPortAsync
代替async_std::net::ToSocketAddrs
, - 使用
ToSocketAddrsWithDefaultPortTokio
代替tokio::net::ToSocketAddrs
.
功能
-
sync
(默认启用)启用
ToSocketAddrsWithDefaultPort
。 -
async
启用
ToSocketAddrsWithDefaultPortAsync
。 -
tokio
启用
ToSocketAddrsWithDefaultPortTokio
。
说明
标准库在创建流或监听器时假定明确指示端口号
use std::net::{TcpStream, ToSocketAddrs};
fn connect_http<A: ToSocketAddrs>(addr: A) -> TcpStream {
TcpStream::connect(addr).unwrap()
}
let stream = connect_http("www.google.com:80");
通常有一个特定的标准端口号(HTTP为80,FTP为21等),如果用户只指定服务器地址而没有明确指定端口号,则应默认使用。
普通用户不知道端口号是什么,以及每种情况下应该指定哪个端口号。用户通常只想指定服务器的地址(DNS名称)。
但是直接调用 connect_http("www.google.com")
会失败。您应该强制用户输入包括端口号在内的地址。或者您必须处理其输入,并在没有端口号的情况下添加它(例如,从 "www.google.com"
到 "www.google.com:80"
)。
这很不方便。
因此,您可以使用这个crate并简单地编写
use std::net::TcpStream;
use to_socket_addrs::ToSocketAddrsWithDefaultPort as ToSocketAddrs;
fn connect_http<A: ToSocketAddrs>(addr: A) -> TcpStream {
TcpStream::connect(addr.with_default_port(80)).unwrap()
}
let stream = connect_http("www.google.com");
.with_default_port(...)
函数将检查是否指定了端口号,并在必要时添加它。
依赖关系
~1–15MB
~153K SLoC