Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >InetAddress方法详解[通俗易懂]

InetAddress方法详解[通俗易懂]

作者头像
全栈程序员站长
发布于 2022-09-10 06:45:02
发布于 2022-09-10 06:45:02
1.1K0
举报

大家好,又见面了,我是你们的朋友全栈君。

Java提供了InetAddress类来代表IP地址,InetAddress下还有两个子类:Inet4AddressInet6Address,它们分别代表Internet Protocol version 4(IPv4)地址和Internet Protocol version 6(IPv6)地址。

InetAddress类的方法详解:

boolean isMulticastAddress():检查 InetAddress 是否为 IP 多播地址的实用程序例程。 IP v4多播地址是 D 类地址,即地址的前四位是 1110; IPv6地址开头的 11111111 将该地址标识为多播地址。

boolean isAnyLocalAddress():检查 InetAddress 是否为通配符地址的实用程序例程。

boolean isLoopbackAddress():用于检查 InetAddress 是否为回环地址的实用程序。(127.x.x.x)

boolean isLinkLocalAddress():检查 InetAddress 是否为链路本地地址的实用程序例程。(169.254.0.0/16)

boolean isSiteLocalAddress():检查 InetAddress 是否为站点本地地址的实用程序例程。参考RFC 1918 10/8 前缀 172.16/12 前缀 192.168/16 前缀

boolean isMCGlobal():用于检查多播地址是否具有全局范围的实用程序。 (224.0.1.0 to 238.255.255.255)

boolean isMCNodeLocal():检查多播地址是否具有节点范围的实用程序。

boolean isMCLinkLocal():检查多播地址是否具有链接范围的实用程序。 (224.0.0/24 前缀 并且 ttl == 1)

boolean isMCSiteLocal():用于检查多播地址是否具有站点范围的实用程序。 (239.255/16 前缀 或者 ttl < 32)

boolean isMCOrgLocal():检查多播地址是否具有组织范围的实用程序。(239.192 - 239.195)

boolean isReachable(int timeout):等价于isReachable(null, 0 , timeout) boolean isReachable(NetworkInterface netif, int ttl, int timeout):测试该地址是否可达。 实现会尽最大努力尝试访问主机,但防火墙和服务器配置可能会阻止请求,导致无法访问状态,而某些特定端口可能可以访问。 如果可以获得特权,典型的实现将使用 ICMP ECHO REQUEST,否则它将尝试在目标主机的端口 7(Echo)上建立 TCP 连接。 network interface和ttl参数让调用者指定测试将通过哪个网络接口以及数据包应该通过的最大跳数。 ttl负值将导致抛出 IllegalArgumentException。 超时值(以毫秒为单位)指示尝试应花费的最长时间。 如果操作在得到应答前超时,则认为主机不可达。负值将导致抛出 IllegalArgumentException。 参数: netif – 将通过其完成测试的 NetworkInterface,或者为任何接口为 null ttl – 要尝试的最大跳数或默认值为 0 timeout – 调用中止前的时间(以毫秒为单位)

String getHostName():获取此 IP 地址的主机名。 如果这个 InetAddress 是用主机名创建的,这个主机名将被记住并返回; 否则,将执行反向名称查找,并根据系统配置的名称查找服务返回结果。 如果需要查找名称服务,请调用getCanonicalHostName 。 如果有安全管理器,则首先使用主机名和-1作为参数调用其checkConnect方法,以查看是否允许操作。 如果操作不被允许,它将返回 IP 地址的文本表示。 返回值: 此 IP 地址的主机名,或者如果安全检查不允许操作,则为 IP 地址的文本表示。

String getCanonicalHostName():获取此 IP 地址的完全限定域名。 尽力而为的方法,这意味着我们可能无法根据底层系统配置返回 FQDN。 如果有安全管理器,这个方法首先用主机名和-1作为参数调用它的checkConnect方法,看看是否允许调用代码知道这个IP 地址的主机名,即连接到主机。 如果操作不被允许,它将返回 IP 地址的文本表示。 返回值: 此 IP 地址的完全限定域名,或者如果安全检查不允许操作,则为 IP 地址的文本表示。

byte[] getAddress():返回此InetAddress对象的原始 IP 地址。 结果按网络字节顺序排列:地址的最高顺序字节在getAddress()[0] 。

String getHostAddress():以文本形式返回 IP 地址字符串。 返回值: 字符串格式的原始 IP 地址。

static InetAddress getByAddress(String host, byte[] addr):根据提供的主机名和 IP 地址创建 InetAddress。 没有名称服务检查地址的有效性。 主机名可以是机器名称,例如“ java.sun.com ”,也可以是其 IP 地址的文本表示。也不会对主机名进行有效性检查。 如果 addr 指定了 IPv4 地址,则将返回 Inet4Address 的实例; 否则,将返回 Inet6Address 的实例。 IPv4 地址字节数组必须为 4 字节长,IPv6 字节数组必须为 16 字节长 参数: 主机 - 指定的主机 addr – 网络字节顺序的原始 IP 地址 返回值: 从原始 IP 地址创建的 InetAddress 对象。

static InetAddress getByName(String host):根据主机名确定主机的 IP 地址。 主机名可以是机器名称,例如“ java.sun.com ”,也可以是其 IP 地址的文本表示。 如果提供了文字 IP 地址,则仅检查地址格式的有效性。 对于以文字 IPv6 地址指定的host ,接受 RFC 2732 中定义的格式或 RFC 2373 中定义的文字 IPv6 地址格式。 还支持 IPv6 范围地址。 有关 IPv6 范围地址的说明,请参见此处。 如果主机为null则返回表示环回接口地址的InetAddress 。 请参阅RFC 3330 第 2 节和RFC 2373 第 2.5.3 节。 参数: host – 指定的主机,或null 。 返回值: 给定主机名的 IP 地址。

static InetAddress[] getAllByName(String host):给定主机的名称,根据系统上配置的名称服务返回其 IP 地址的数组。 主机名可以是机器名称,例如“ java.sun.com ”,也可以是其 IP 地址的文本表示。 如果提供了文字 IP 地址,则仅检查地址格式的有效性。 对于在文本 IPv6 地址中指定的host ,接受 RFC 2732 中定义的格式或 RFC 2373 中定义的文本 IPv6 地址格式。 也可以通过附加范围区域标识符或 scope_id 来限定文字 IPv6 地址。 此处描述了 scope_ids 的语法和用法。 如果主机为null则返回表示环回接口地址的InetAddress 。 请参阅RFC 3330 第 2 节和RFC 2373 第 2.5.3 节。 如果存在安全管理器且host不为 null 且host.length()不等于零,则使用主机名和-1作为参数调用安全管理器的checkConnect方法,以查看是否允许操作。 参数: host – 主机的名称,或null。 返回值: 给定主机名的所有 IP 地址的数组。

static InetAddress getLoopbackAddress():返回环回地址。返回的 InetAddress 将代表 IPv4 环回地址 127.0.0.1 或 IPv6 环回地址 ::1。 返回的 IPv4 环回地址只是 127.*.*.* 形式的众多地址之一。

static InetAddress getByAddress(byte[] addr):返回给定原始 IP 地址的InetAddress对象。 参数按网络字节顺序排列:地址的最高顺序字节在getAddress()[0] 。 此方法不会阻塞,即不执行反向名称服务查找。 IPv4 地址字节数组必须为 4 字节长,IPv6 字节数组必须为 16 字节长 参数: addr – 网络字节顺序的原始 IP 地址 返回值: 从原始 IP 地址创建的 InetAddress 对象。

static InetAddress getLocalHost():返回本地主机的地址。 这是通过从系统检索主机的名称,然后将该名称解析为InetAddress 。 注意:解析后的地址可能会被缓存一小段时间。如果存在安全管理器,则使用本地主机名和-1作为参数调用其checkConnect方法,以查看是否允许操作。 如果不允许该操作,则返回表示环回地址的 InetAddress。 返回值:本地主机的地址。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/152255.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java网络编程之InetAddress类详解,URL和URI的区别,URLDecoder和URLEncoder,IPv6和IPv4区别,IPv6的三种表示方法
Java提供了InetAddress类来代表IP地址,InetAddress下还有两个子类:Inet4Address、Inet6Address,它们分别代表Internet Protocol version 4(IPv4)地址和Internet Protocol version 6(IPv6)地址。 InetAddress常用方法: 验证是否可达:
共饮一杯无
2022/11/28
8010
Java网络编程之InetAddress类详解,URL和URI的区别,URLDecoder和URLEncoder,IPv6和IPv4区别,IPv6的三种表示方法
InetAddress 解析
IP地址分为IPv4 和IPv6。 IPv4 4字节长的ip称为IPv4.目前大部分ip都是IPv4。 IPv4地址一般写为四哥无符号的字节,每个字节范围从0到255,最高字节在前面。为方便人们查看,各字节用点号分割。 例如:192.168.1.100.这称为点分四段格式。 IPv6 16字节长的ip成为IPv6. IPv6地址通常些微冒号分割的8个区块,每个区块4个十六进制数字。 例如:2400:cb00:2048:1:0:0:6ca2:c665 两个冒号标识多个0区块,但每个地址中双冒号之多出现一
java404
2018/05/18
2K0
Java中InetAddress的使用(二):获取本机IP地址的正确姿势【享学Java】
本文接着上文的内容,主要解答上文留下的疑问:既然不能使用InetAddress#getLocalHost()直接去获取到本机的IP地址,那么如何破呢?
YourBatman
2020/04/08
18.1K2
使用InetAddress
  Java为网络支持提供了java.net包,该包下的URL和URLConnection等类提供了以编程方式访问Web服务的功能,而URLDecoder和URLEncoder则提供普通字符串和 application/x-www-form-urlencoded MIME 字符串相互转换的静态方法。
全栈程序员站长
2022/09/10
2970
【java网络】IO编程
Prequirement 在继续阅读这篇文章之前,请务必先阅读前面这篇Java IO概述,因为Java把所有的IO都统一成流(Stream)了。 TCP/IP协议栈。知道IP、端口、DNS、Socket、URL、TCP、UDP、HTTP等网络相关知识。 IP地址: InetAddress java.net.InetAddress类是Java对IP地址(包括IPv4和IPv6)的封装。一般来说,它同时包含主机名(hostname)和IP地址。 1. 创建方式(工厂方法) public static InetA
程序员互动联盟
2018/03/16
1.3K0
IPv6协议结构
删除每组的前导0, 把连续的一段0压缩为:: ,在一个IPv6地址中::只能出现一次
十二惊惶
2024/02/28
3870
IPv6协议结构
【Java】22 网络连接
java.net.InetAddress此类表示互联网协议 (IP) 地址。IP 地址是 IP 使用的 32 位或 128 位无符号数字,它是一种低级协议,UDP 和 TCP 协议都是在它的基础上构建的。InetAddress 的实例包含 IP 地址,还可能包含相应的主机名(取决于它是否用主机名构造或者是否已执行反向主机名解析)。
Demo_Null
2020/09/28
1.4K0
【Java】22 网络连接
Java——InetAddress操作
获取百度ip地址: package com.item.demo; import java.net.InetAddress; import java.net.UnknownHostException; public class Demo6 { public static void main(String[] args) { // TODO Auto-generated method stub // 根据主机名获取对应的 InetAddress 对象 InetAddress ip; tr
红目香薰
2023/03/09
5600
Java——InetAddress操作
【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介
Android 网络编程相关的包 : 9 包, 20 接口, 103 类, 6 枚举, 14异常; 
韩曙亮
2023/03/27
8920
创建InetAddress对象的四个静态方法[通俗易懂]
  InetAddress类是Java中用于描述IP地址的类。它在java.net包中。在Java中分别用Inet4Address和Inet6Address类来描述IPv4和IPv6的地址。这两个类都是InetAddress的子类。由于InetAddress没有public的构造方法,因此,要想创建InetAddress对象,必须得依靠它的四个静态方法。InetAddress可以通过getLocalHost方法得到本机的InetAddress对象,也可以通过getByName、getAllByName和getByAddress得到远程主机的InetAddress对象。
全栈程序员站长
2022/09/10
1.1K0
ddns dnspod_dns和ddns的区别
DNS只是提供了域名和IP地址之间的静态对应关系,当IP地址发生变化时,DNS无法动态的更新域名和IP地址之间的对应关系,从而导致访问失败。但是DDNS系统是将用户的动态IP地址映射到一个固定的域名解析服务上
全栈程序员站长
2022/09/27
3K0
linux的traceroute命令详解[通俗易懂]
traceroute [-46dFITUnrAV] [-f first_ttl] [-g gate,…]
全栈程序员站长
2022/11/17
2K0
Java对IPv6的支持详解:支持情况、相关API、演示代码等
本文由朱益盛、杨晖、傅啸分享,来自IBM Developer社区,原题“使用 Java 开发兼容 IPv6 的网络应用程序”,本次收录时有改动。
JackJiang
2020/12/07
2.5K0
Java中InetAddress的使用(一):域名解析【享学Java】
Java具有较好的网络编程模型/库,其中非常重要的一个API便是InetAddress。在在java.net网络编程中中有许多类都使用到了InetAddress,包括ServerSocket,Socket,DatagramSocket等等。
YourBatman
2020/04/08
7.8K0
Java中InetAddress的使用(一):域名解析【享学Java】
关于BCT的SUBSEQUENT CONFLICTS(后续冲突)报错解决
当设备重新发出对该主机名的探测时,测试工具再次发送其冲突响应,并验证设备是否选择了新的主机名并再次探测/宣布。如果设备选择新的主机名而未首先探测其原始名称,则会发出警告。对设备正在使用的服务名称(SRV记录)重复此过程。(如果操作员禁用SRV探测/通告,则禁用。)
天天Lotay
2023/03/01
6440
cmd ping命令大全_ping命令怎么使用
ping是一种Computer network tools(电脑网络工具),作用是测试数据包是否能通过IP协议到达特定主机。Ping是Windows系统、Unix系统和Linux系统下的一个命令。它也属于一个通信协议,是TCP/IP协议的一部分。利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障。该命令还可以加许多参数使用。例如:-t,-l, – n。(注意,所有ping指令都必须在知道IP的情况下使用)
全栈程序员站长
2022/11/08
8.6K0
cmd ping命令大全_ping命令怎么使用
inetaddress java_java中Inetaddress类
你通过一个IP主机名与这个类发生作用,IP主机名比它的IP地址用起来更简便更容易理解。
全栈程序员站长
2022/09/10
4070
Linux系统下socket编程socket接口介绍(二)
在上一篇文章里面我们介绍了TCP的三次握手和四次挥手过程的介绍以及网络编程里面的一些api接口函数的介绍——Linux系统下socket编程之socket接口介绍(一)。今天我们继续来介绍网络编程里面的其它接口函数,为实战打下 基础;网络编程专题文章拖的有点久,这两天全部把它写完,不能再拖了。
用户6280468
2022/03/18
4.1K0
Java从入门到精通十三(java网络编程)
前言:不在本文中详细说明网络通信(具体的准备有时间开一个网络专栏,具体按照Cisco Packet进行实验模拟说明。)
兰舟千帆
2022/07/16
2K0
Java从入门到精通十三(java网络编程)
InetAddress.getByName背后发生了什么
在一次问题排查过程中,发现偶现调用"InetAddress.getByName()"无法通过域名解析到IP(实际在容器中都能正确解析到),因此怀疑和容器的DNS解析有问题。但在与容器的开发兄弟沟通过程中,被反问了一句,确定该方法一定触发调用了DNS的域名解析吗?
陈猿解码
2023/10/06
5700
InetAddress.getByName背后发生了什么
推荐阅读
相关推荐
Java网络编程之InetAddress类详解,URL和URI的区别,URLDecoder和URLEncoder,IPv6和IPv4区别,IPv6的三种表示方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档