#socket-address #port #addresses #replace #default #net #specify

to-socket-addrs

一个小型的 ToSocketAddrs 替代品,用于指定不带端口的地址

2个不稳定版本

0.2.1 2022年6月24日
0.2.0 2022年6月24日
0.1.0 2022年5月26日

#4#socket-address

MIT 许可证

22KB
269

to-socket-addrs

一个用于指定不带端口的地址的小型替代品 std::net::ToSocketAddrs

Build Status MIT licensed Latest Version Docs

用法

要使用此包,将 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