Socket兼容IP和域名的原因

本文涉及的产品
.cn 域名,1个 12个月
简介: Socket兼容IP和域名的原因


测试代码

//将172.16.12.171 替换为 xingyun25 打印结果一致
Socket sock = new Socket("172.16.12.171",12331); 
InetAddress netAddress = sock.getInetAddress();
System.out.println(netAddress.getHostName());
System.out.println(netAddress.getHostAddress());
sock.close();

打印结果

xingyun25
172.16.12.171

查看 Socket 方法

 public Socket(String host, int port) throws UnknownHostException, IOException
    {
       //host != null 因此第一个参数为new InetSocketAddress(host, port)
       this(host != null ? new InetSocketAddress(host, port) :
             new InetSocketAddress(InetAddress.getByName(null), 
             //第二个参数 (SocketAddress) null 
             //第三个参数 true             (SocketAddress) null, true);
    }


查看 this 构造方法


private Socket(SocketAddress address, SocketAddress localAddr,
                   boolean stream) throws IOException {
    setImpl();
    // backward compatibility
if (address == null)
        throw new NullPointerException();
    try {
        createImpl(stream);
if (localAddr != null)
            //localhost/127.0.0.1
            bind(localAddr);
        //建立连接
        connect(address);
    } catch (IOException | IllegalArgumentException | SecurityException e) {
        try {
            close();
        } catch (IOException ce) {
            e.addSuppressed(ce);
        }
        throw e;
    }
}

对于 setImpl 方法


void setImpl() {
if (factory != null) {
        impl = factory.createSocketImpl();
        checkOldImpl();
    } else {
        // No need to do a checkOldImpl() here, we know it's an up to date        // SocketImpl!        impl = new SocksSocketImpl();    }    //Impl SET Socket     if (impl != null)        impl.setSocket(this);}

对于 createImpl 方法


// SocketImpl impl :The implementation of this Socket. 
void createImpl(boolean stream) throws SocketException {
if (impl == null)
        setImpl();
    try {
        impl.create(stream);
        created =true;
    } catch (IOException e) {
        throw new SocketException(e.getMessage());
    }
}

查看InetSocketAddress方法通过IP和域名创建有何不同


 public InetSocketAddress(String hostname, int port) {
        checkHost(hostname);
        InetAddress addr = null;
    String host = null;
        try {
            addr = InetAddress.getByName(hostname);
        } catch(UnknownHostException e){
           host = hostname;
        }
        //实际构造了 InetSocketAddressHolder 
        holder = new InetSocketAddressHolder(host, addr, checkPort(port));
    }
connect 过程中实际使用的是 InetAddress
 private InetSocketAddressHolder(String hostname, InetAddress addr, int port) {
            this.hostname = hostname;
             this.addr = addr;
            this.port = port;
}

————————————————


相关文章
|
6天前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
35 3
|
8天前
|
运维 监控 安全
在实际应用中,如何选择基于不同域名还是不同 IP 进行代理多服务的配置?
综上所述,在实际应用中选择基于不同域名还是不同 IP 进行代理多服务的配置,需要根据具体的业务需求、可扩展性、性能、安全性以及维护和管理成本等多方面因素进行综合考虑,权衡利弊,选择最适合自己系统架构和运营需求的配置方式。
|
5月前
|
网络协议 安全 Java
Java网络编程入门涉及TCP/IP协议理解与Socket通信。
【6月更文挑战第21天】Java网络编程入门涉及TCP/IP协议理解与Socket通信。TCP/IP协议包括应用层、传输层、网络层和数据链路层。使用Java的`ServerSocket`和`Socket`类,服务器监听端口,接受客户端连接,而客户端连接指定服务器并交换数据。基础示例展示如何创建服务器和发送消息。进阶可涉及多线程、NIO和安全传输。学习这些基础知识能助你构建网络应用。
49 1
|
9天前
|
安全 数据建模 测试技术
只有ip没有域名怎么申请SSL
在没有域名只有IP地址的情况下,仍可申请SSL证书。需确保拥有固定公网IP地址和服务器管理权限,选择支持IP SSL证书的CA(如JoySSL),完成注册、购买、验证、安装和测试等步骤,实现HTTPS加密访问。注意证书有效期、兼容性和安全性。
|
2月前
|
网络协议 安全
网络中IP地址与域名系统
网络中IP地址与域名系统
55 3
|
4月前
|
Linux 网络架构
通过route , tracert , traceroute 查看本地路由配置及访问ip或域名时经过的路由信息
通过route , tracert , traceroute 查看本地路由配置及访问ip或域名时经过的路由信息
623 2
|
3月前
|
域名解析 缓存 负载均衡
在Linux中,自定义解析域名的时候,可以编辑哪个⽂件?是否可以⼀个ip对应多个域名?是否⼀个域名对应多个ip?
在Linux中,自定义解析域名的时候,可以编辑哪个⽂件?是否可以⼀个ip对应多个域名?是否⼀个域名对应多个ip?
|
5月前
网络编程中的互联网协议 , IP地址 , 域名 , 端口 , 架构 , 网页数据请求 , 响应码
网络编程中的互联网协议 , IP地址 , 域名 , 端口 , 架构 , 网页数据请求 , 响应码
|
4月前
|
Web App开发
软件开发常见流程之移动端调试方法,利用Chrome(谷歌浏览器)的模拟手机调试,搭建本地Web服务器,手机和服务器在一个局域网,通过手机访问服务器,使用服务器,利用ip实现域名访问
软件开发常见流程之移动端调试方法,利用Chrome(谷歌浏览器)的模拟手机调试,搭建本地Web服务器,手机和服务器在一个局域网,通过手机访问服务器,使用服务器,利用ip实现域名访问
|
5月前
|
运维 Serverless Docker
Serverless 应用引擎产品使用合集之想使用IP地址而不是临时域名进行访问如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。