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
posted @ 2026-04-16 21:37  lxd670  阅读(13)  评论(0)    收藏  举报