SocketAddr
Internet套接字地址,IPv4 或 IPv6
pub enum SocketAddr {V4(SocketAddrV4),V6(SocketAddrV6),
}
创建
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
获取内容
ip
use std::net::{IpAddr, Ipv4Addr, SocketAddr};fn main() {let socket = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 8080);// 返回IpAddrlet 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);// 返回u16let 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
