在1.0之前的Rust版本中,我能够使用from_str()转换String为SocketAddr,但该函数不再存在.我怎么能在Rust 1.0中做到这一点.
let server_details = reader.read_line().ok().expect("Something went wrong").as_slice().trim();
let server: SocketAddr = from_str(server_details);
let mut s = BufferedStream::new((TcpStream::connect(server).unwrap()));
Run Code Online (Sandbox Code Playgroud)
She*_*ter 12
from_str被重命名为parse,现在是一个可以调用字符串的方法:
use std::net::SocketAddr;
fn main() {
let server_details = "127.0.0.1:80";
let server: SocketAddr = server_details
.parse()
.expect("Unable to parse socket address");
println!("{:?}", server);
}
Run Code Online (Sandbox Code Playgroud)
如果您希望能够将DNS条目解析为IPv {4,6}地址,您可能希望使用ToSocketAddrs:
use std::net::{TcpStream, ToSocketAddrs};
fn main() {
let server_details = "stackoverflow.com:80";
let server: Vec<_> = server_details
.to_socket_addrs()
.expect("Unable to resolve domain")
.collect();
println!("{:?}", server);
// Even easier, if you want to connect right away:
TcpStream::connect(server_details).expect("Unable to connect to server");
}
Run Code Online (Sandbox Code Playgroud)
to_socket_addrs返回一个迭代器,因为单个DNS条目可以扩展为多个 IP地址!请注意,此代码在操场上不起作用,因为那里禁用了网络访问; 你需要在本地尝试一下.
我将在 Shepmaster 的回答中扩展“如果你想立即连接”的评论。
请注意,您实际上并不需要提前将字符串转换为 aSocketAddr以连接到某些内容。TcpStream::connect()和其他接受地址的函数被定义为接受ToSocketAddrtrait的实例:
fn connect<T: ToSocketAddr>(addr: T) -> TcpStream { ... }
Run Code Online (Sandbox Code Playgroud)
这意味着你可以只传递一个字符串而connect()无需任何转换:
TcpStream::connect("stackoverflow.com:80")
Run Code Online (Sandbox Code Playgroud)
而且,最好不要SocketAddr预先将字符串转换为,因为域名可以解析为多个地址,并且TcpStream有特殊的逻辑来处理这个问题。
| 归档时间: |
|
| 查看次数: |
4186 次 |
| 最近记录: |