Java-API简析_java.net.InetAddress类(基于 Latest JDK)(浅析源码)

news2024/11/16 7:52:07

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://blog.csdn.net/m0_69908381/article/details/131590559
出自【进步*于辰的博客】

因为我发现目前,我对Java-API的学习意识比较薄弱,需要慢慢习惯使用Java-API,乃至剖析源码来提升自己的源码阅读能力和编码素质。
大家如果需要Java-API文档,我上传了【https://download.csdn.net/download/m0_69908381/87691693】。

文章目录

  • 1、概述
  • 2、方法摘要
    • 2.1 boolean equals(Object obj)
    • 2.2 byte[] getAddress()
    • 2.3 static InetAddress[] getAllByName(String host)
    • 2.4 static InetAddress getByAddress(byte[] addr)
    • 2.5 static InetAddress getByAddress(String host, byte[] addr)
    • 2.6 static InetAddress
    • 2.7 String getCanonicalHostName()
    • 2.8 String getHostAddress()
    • 2.9 String getHostName()
    • 2.10 static InetAddress getLocalHost()
    • 2.11 int hashCode()
    • 2.12 boolean isAnyLocalAddress()
    • 2.13 boolean isLinkLocalAddress()
    • 2.14 boolean isLoopbackAddress()
    • 2.15 boolean isMCGlobal()
    • 2.16 boolean isMCLinkLocal()
    • 2.17 boolean isMCNodeLocal()
    • 2.18 boolean isMCOrgLocal()
    • 2.19 boolean isMCSiteLocal()
    • 2.20 boolean isMulticastAddress()
    • 2.21 boolean isReachable(int timeout)
    • 2.22 boolean isReachable(NetworkInterface netif, int ttl, int timeout)
    • 2.23 boolean isSiteLocalAddress()
    • 2.24 String toString()

1、概述

所有已实现的接口:
Serializable

直接已知子类:
Inet4Address、Inet6Address


public class InetAddress extends Object implements Serializable

此类表示互联网协议 (IP) 地址。

IP 地址是 IP 使用的 32 位或 128 位无符号数字,它是一种低级协议,UDP 和 TCP 协议都是在它的基础上构建的。IP 地址的体系结构是由 RFC 790:Assigned Numbers、 RFC 1918:Address Allocation for Private Internets、RFC 2365:Administratively Scoped IP Multicast 和 RFC 2373:IP Version 6 Addressing Architecture 定义。InetAddress 的实例包含 IP 地址,还可能包含相应的主机名(取决于它是否用主机名构造或者是否已执行反向主机名解析)。

地址类型
单播
单个接口的标识符。发送到单播地址的数据包被交付给由该地址标识的接口。
多播地址:也称为 anylocal 地址通配符地址一定不能将其分配给任何节点。它指示缺少地址。它的一个使用示例是可以作为绑定的目标,这允许服务器在服务器主机有多个接口的情况下接收任何接口上的客户端连接。
指定 地址一定不能用作 IP 数据包的目标地址。
回送 地址:它是分配给回送接口的地址。发送到此 IP 地址的任何内容都将返回并作为本地主机上的 IP 输入。此地址常常在测试客户机时使用。
多播
一组接口(通常属于不同的节点)的标识符。发送到多播地址的数据包被交付给由该地址标识的所有接口。

IP 地址范围

链接本地 地址设计用于在单个链接上寻址以解决诸如自动地址配置、邻居发现 (neighbor discovery) 或没有路由器时的问题。

站点本地 地址设计用于在不需要全球前缀时站点内部寻址。

全球 地址在 Internet 中是唯一的。

IP 地址的文本表示形式

IP 地址的文本表示形式是特定于地址系列的。
有关 IPv4 地址格式,请参阅 Inet4Address#format,有关 IPv6 地址格式,请参阅 Inet6Address#format。

主机名解析

主机名到 IP 地址的解析 通过使用本地机器配置信息网络命名服务(如域名系统(Domain Name System,DNS)和网络信息服务(Network Information Service,NIS))来实现。要使用的特定命名服务默认情况下是本地机器配置的那个。对于任何主机名称,都返回其相应的 IP 地址。

反向名称解析 意味着对于任何 IP 地址,都返回与 IP 地址关联的主机。

InetAddress 类提供将主机名解析为其 IP 地址(或反之)的方法。

InetAddress 缓存

InetAddress 类具有一个存储成功及不成功主机名解析的缓存。正缓存用于防止 DNS 哄骗攻击;而负缓存用于提高性能
默认情况下,正主机名解析的结果会永远缓存,因为不存在何时可以安全移除缓存条目的一般规则。不成功主机名解析的结果缓存非常短的时间(10 秒)以提高性能。

在某些特定情形下,即可以确定不可能发生 DNS 哄骗攻击时,可以将 Java 安全属性设置为另外的 Time-to-live (TTL) 值来进行正缓存。类似地,系统管理员在需要时可以配置另外的负缓存 TTL 值。

两个 Java 安全属性控制着用于正负主机名解析缓存的 TTL 值:

networkaddress.cache.ttl(默认值:-1)
指示从名称服务进行成功名称查找的缓存策略。该值被指定为整数,指示缓存成功查找的秒数。
值 -1 指示“永远缓存”。
networkaddress.cache.negative.ttl(默认值:10)
指示从名称服务进行不成功名称查找的缓存策略。该值被指定为整数,指示缓存不成功查找故障的秒数。
值 0 指示“永远不缓存”。值 -1 指示“永远缓存”。

从以下版本开始:
JDK1.0
另请参见:
getByAddress(byte[])getByAddress(java.lang.String, byte[])getAllByName(java.lang.String)getByName(java.lang.String)getLocalHost()、序列化表格

2、方法摘要

2.1 boolean equals(Object obj)

将此对象与指定对象比较。
说明:
先看源码。
在这里插入图片描述
注译:

  1. obj与当前实例进行比较,当且仅当obj != null,且两者所代表的ip地址相同时,返回 true;
  2. ip地址相同条件:2个实例通过调用getAddress()(见下1项)获取的byte[]长度成分(内容)相同。

为何源码无任何业务,直接返回 false,暂未可知。

2.2 byte[] getAddress()

返回此 InetAddress 对象的原始 IP 地址。
说明:
先看源码。
在这里插入图片描述
注译:返回实例所代表的原始 ip 地址

为何源码无任何业务,直接返回 null,暂未可知。

2.3 static InetAddress[] getAllByName(String host)

在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。

2.4 static InetAddress getByAddress(byte[] addr)

在给定原始 IP 地址的情况下,返回 InetAddress 对象。

2.5 static InetAddress getByAddress(String host, byte[] addr)

根据提供的主机名和 IP 地址创建 InetAddress。

2.6 static InetAddress

在给定主机名的情况下确定主机的 IP 地址。

2.7 String getCanonicalHostName()

获取此 IP 地址的完全限定域名。

2.8 String getHostAddress()

返回 IP 地址字符串(以文本表现形式)。

2.9 String getHostName()

获取此 IP 地址的主机名。

2.10 static InetAddress getLocalHost()

返回本地主机。

2.11 int hashCode()

返回此 IP 地址的哈希码。

2.12 boolean isAnyLocalAddress()

检查 InetAddress 是否是通配符地址的实用例行程序。

2.13 boolean isLinkLocalAddress()

检查 InetAddress 是否是链接本地地址的实用例行程序。

2.14 boolean isLoopbackAddress()

检查 InetAddress 是否是回送地址的实用例行程序。

2.15 boolean isMCGlobal()

检查多播地址是否具有全球范围的实用例行程序。

2.16 boolean isMCLinkLocal()

检查多播地址是否具有链接范围的实用例行程序。

2.17 boolean isMCNodeLocal()

检查多播地址是否具有节点范围的实用例行程序。

2.18 boolean isMCOrgLocal()

检查多播地址是否具有组织范围的实用例行程序。

2.19 boolean isMCSiteLocal()

检查多播地址是否具有站点范围的实用例行程序。

2.20 boolean isMulticastAddress()

检查 InetAddress 是否是 IP 多播地址的实用例行程序。

2.21 boolean isReachable(int timeout)

测试是否可以达到该地址。

2.22 boolean isReachable(NetworkInterface netif, int ttl, int timeout)

测试是否可以达到该地址。

2.23 boolean isSiteLocalAddress()

检查 InetAddress 是否是站点本地地址的实用例行程序。

2.24 String toString()

将此 IP 地址转换为 String。


本文持续更新中。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/727873.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git因网络问题报错

Failed to connect to github.com port 443 after 21051 ms: Couldnt connect to server Recv failure: Connection was reset 你是否最近也有遇到这种情况呢? 公司项目目前保存在github上, 在 git pull 和 git push 的时候总是遇到以上情况 也是困扰了我不少…

ESP32-C2 固件烧录需满足的硬件环境整理

ESP32-C2 默认通过 UART0 (即 TXD(GPIO20)和 RXD(GPIO19))下载固件。 Windows 下可使用 Flash download tool 工具来下载编译后的 bin 文件; 运行 flash_download_tool.exe 的文件 选择开发…

2023 最新互联网大厂Java面经分享:25 分类、1000 道 Java 面试真题(50w 字解析)

作为 Java 程序员,选择学习什么样的技术?什么技术该不该学?去招聘网站上搜一搜、看看岗位要求就十分清楚了,自己具备的技术和能力,直接影响到你工作选择范围和能不能面试成功。 如果想进大厂,那就需要在 Ja…

数据库-分布式数据库历史变迁之旅

我们正式开始分布式数据库历史变迁之旅。 单机数据库的不可能三角 正如经济政策的不可能三角“不可能同时实现资本流动自由,货币政策的独立性和汇率的稳定”那样,单机数据库也有一个不可能三角,那就是:①持久化 ②事务隔离 ③高性…

17款奔驰S400加装原厂无钥匙进入系统,提升您的便利性

奔驰无钥匙进入功能,只要身上装着车钥匙进入车内,车辆就能感应到钥匙的存在,这时只需按下启动键就可启动车辆了 奔驰无钥匙进入功能主要有两大使用体验,首先就是要注意主驾驶位车门的有效检测距离不小于1.5m,其他门钥匙…

BOM/PCB/Gerber比对功能再升级,华秋DFM新版邀您体验!

在电子产品开发过程中,方案选型、原理图设计、BOM制作、PCB设计再到PCB、PCBA的生产都会经历多次版本迭代。在硬件开发过程中BOM文件的迭代、PCB设计的版本迭代是最为常见的,所以对应的版本管控至关重要,只有清晰地了解不同版本的差异&#x…

武汉理工大学第四届ACM校赛

武汉理工大学第四届ACM校赛传送门 A-ST和TS回文问题 这种题都是有一定简单的规律的 如果每个字符都相等的话,肯定存在 如果字符串T的长度是字符串S的整数倍的话,如果字符串S是回文串或者T的长度是S的长度的奇数倍的话,那么存在 否则不存在 就自己构造字符串来找规律&…

121.实战网页图片优化

如上图所示,这个图标的内部尺寸为14791459,但是我们实际呈现的渲染的效果为570562;所以我们可以调整一下图像的大小,缩小图片的文件大小; 我们可以修改他的尺寸,文件的大小就缩小了。但是在网页上显示一点区…

软件测试之单元测试详解

目录 前言: 1、什么是单元测试? 2、什么是好的单元测试? 3、怎么写单元测试? 4、玩转单元测试 前言: 单元测试是软件测试中的一种测试方法,用于验证代码中最小可测试单元的正确性。它主要关注对程序的…

云上百世慧|「慧」聚智能制造的全流程质量管控(我们在7月31日等你)

在制造业的迅猛发展中,「质量管控」一直是企业面临的重要挑战和痛点。如何对「原材料、组件、生产过程和最终产品」进行严格的监控和控制? 稳抓行业痛点,优化质量流程 质量管控,是确保产品符合标准的关键环节。通过严格的监控和控…

卸载mathtype导致的word问题 MathPage.wll not found

MathType 6.9简体中文版是一款功能很强大的数学公式编辑器,但是因为不明原因,有时会出现找不到MathType.dll或者MathPage.wll文件找不到的错误窗口提示,而导致软件无法正常使用,本文将教您解决MathPage.wll或MathType.dll文件找不到的问题。 错误提示&a…

5 给属性赋值的几种方式

首先创建两个类,Person和Dog。为了可以被扫描到,在前面加入Component注解。 Person类如下: package jiang.com.helloworld.pojo;import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.…

React 之 过渡动画

一、React的过渡动画 在开发中,我们想要给一个组件的显示和消失添加某种过渡动画,可以很好的增加用户体验 可以通过原生的CSS来实现这些过渡动画,但是React社区为我们提供了react-transition-group用来完成过渡动画 React曾为开发者提供过动画…

MySQL表/用户权限等基本操作

MySQL表操作练习题: 第一题: 具体要求如下所示: 1. 创建数据库Market: CREATE DATABASE Market;2. 创建customers表: 表结构如图所示: CREATE TABLE customers( c_num INT(11) PRIMARY KEY, c_name…

TiDB(8):技术内幕之计算

1 关系模型到 Key-Value 模型的映射 在这我们将关系模型简单理解为 Table 和 SQL 语句,那么问题变为如何在 KV 结构上保存 Table 以及如何在 KV 结构上运行 SQL 语句。 假设我们有这样一个表的定义: CREATE TABLE User {ID int,Name varchar(20),Role …

基于springboot+vue的文超市进销存管理系统(源代码+数据库+12000字论文)083

基于springbootvue的文超市进销存管理系统(源代码数据库12000字论文)083 一、系统介绍 (本项目有ssmvue版本) 本系统分为管理员、用户、员工三种角色 用户角色包含以下功能: 登录、注册、购物车、订单提交、商品评论、收藏、充值、收货地址管理、收藏管理、订单…

NXP-无感BLDC代码MCSPTE1AK116_BLDC_6Step代码详解

目录 开发平台 工程目录 Generated_Code Sources Config 电机的参数 BLDC参数 无感模式下的一些参数 Peripherals FTM/PDB/ADC配置参数 actuate_s32k meas_s32k motor_structure state_machine main main()主函数 PORT_IRQHandler() PDB0_IRQHandler() FTM1…

最大正方形 · Maximal Square

链接: 题解:九章算法 - 帮助更多程序员找到好工作,硅谷顶尖IT企业工程师实时在线授课为你传授面试技巧 1.暴力的方法:遍历每一个(i,j)位置,如果当前点为1,则以当前节点为…

如何编写PlantUml文本绘图时序图

效果如图 代码示例 startumlparticipant "上游" as BEGIN participant "SFTP" as SFTP control "文件系统" as FILE participant "业务系统" as BUSactivate BEGIN BEGIN ->SFTP: 上传文件 activate SFTP autonumber 1.0 FILE -&g…

常用的网址

画图网页: https://www.processon.com/diagrams 二进制转换网页: https://tool.oschina.net/hexconvert/ 在线网络计算器 https://www.sojson.com/convert/subnetmask.html 学习网站掘金: https://juejin.cn 注册外网账号网页&#xff1a…