std::net::SocketAddr
SocketAddr
Internet套接字地址,IPv4 或 IPv6
pub enum SocketAddr {
V4(SocketAddrV4),
V6(SocketAddrV6),
}
创建
new
SocketAddr::new自动返回SocketAddr::V4或者SocketAddr::V6
use std::net::{IpAddr, Ipv4Addr, SocketAddr};
fn main() {
let socket = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 8080);
println!("socket: {:?}", socket);
}
socket: 127.0.0.1:8080
字符串解析
parse
.parse()是内置语法,不需要导入任何 trait
use std::net::SocketAddr;
fn main() {
let addr:SocketAddr = "127.0.0.1:8080".parse().unwrap();
println!("{:?}", addr);
println!("{:?}", addr.ip());
println!("{:?}", addr.port());
}
127.0.0.1:8080
127.0.0.1
8080
from_str
需要引入
use std::str::FromStr;
use std::net::SocketAddr;
use std::str::FromStr;
fn main() {
// let addr1::SocketAddr = "127.0.0.1:8080".parse().unwrap();
let s = SocketAddr::from_str("127.0.0.1:9999");
match s {
Ok(addr) => {
println!("{:?}", addr);
println!("{:?}", addr.ip());
println!("{:?}", addr.port());
},
Err(_) => {
println!("Unable to parse socket address");
}
}
}
127.0.0.1:9999
127.0.0.1
9999
获取内容
ip
use std::net::{IpAddr, Ipv4Addr, SocketAddr};
fn main() {
let socket = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 8080);
// 返回IpAddr
let ip = socket.ip();
println!("ip: {}", ip);
}
ip: 127.0.0.1
port
use std::net::{IpAddr, Ipv4Addr, SocketAddr};
fn main() {
let socket = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 8080);
// 返回u16
let port = socket.port();
println!("port: {}", port);
}
port: 8080
判断ip类型
is_ipv4
use std::net::{IpAddr, Ipv4Addr, SocketAddr};
fn main() {
let socket = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 8080);
println!("v4: {}", socket.is_ipv4());
println!("v6: {}", socket.is_ipv6());
}
v4: true
v6: false
Is_ipv6
use std::net::{IpAddr, Ipv6Addr, SocketAddr};
fn main() {
let socket = SocketAddr::new(IpAddr::V6(Ipv6Addr::new(0, 0, 0, 0, 0, 65535, 0, 1)), 8080);
println!("v4: {}", socket.is_ipv4());
println!("v6: {}", socket.is_ipv6());
}
v4: false
v6: true
设置
set_ip
use std::net::{IpAddr, Ipv4Addr, SocketAddr};
fn main() {
let mut socket = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 8080);
println!("{:?}", socket);
socket.set_ip(IpAddr::V4(Ipv4Addr::new(192, 186, 0, 1)));
println!("{:?}", socket);
}
127.0.0.1:8080
192.186.0.1:8080
set_port
use std::net::{IpAddr, Ipv4Addr, SocketAddr};
fn main() {
let mut socket = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 8080);
println!("{:?}", socket);
socket.set_port(9999);
println!("{:?}", socket);
}
127.0.0.1:8080
127.0.0.1:9999

浙公网安备 33010602011771号