当前位置: 首页 > article >正文

Java - InetAddress#isReachable 方法解析

文章目录

  • 前言
  • 代码
  • 资源


前言

在 Java 中,InetAddress 类提供一个方法来检查一个网络地址是否可达,其作用类似与在命令行执行 ping 命令,

ping www.baidu.com

这个方法就是 isReachable 方法。

代码

var baidu = InetAddress.getByName("www.baidu.com");
var start = System.currentTimeMillis();
if (baidu.isReachable(1000)) {
    System.out.printf("%s spend %dms%n", baidu, System.currentTimeMillis() - start);
} else {
	// 若在 1000 毫秒内没有收到响应,则会执行到这里
    System.out.println("timeout");
}

// www.baidu.com/183.2.172.185 spend 11ms

上面代码就是 InetAddress#isReachable 的用法,注意的是,isReachable 方法在响应前会阻塞

isReachable 方法通过发送 ICMP Echo 请求到目标主机来实现其功能。如果主机在线并且能够接收到 ICMP Echo 请求,那么它将返回 true。否则,它将返回 false

需要注意的是,这个方法可能会受到防火墙的影响。如果防火墙阻止了 ICMP Echo 请求,那么即使主机在线,isReachable 方法也可能返回 false

此外,这个方法只能检测主机是否在线,不能检测主机是否能够通过网络发送数据包。如果你需要检测主机的网络连接状态,你可能需要使用其他的方法。

在 windows 系统中,IPv4 最终通过 IcmpSendEcho 函数实现。

资源

IcmpSendEcho 函数 (icmpapi.h)


http://www.kler.cn/a/160367.html

相关文章:

  • 机器学习——损失函数、代价函数、KL散度
  • 【机器学习】机器学习中用到的高等数学知识-3.微积分 (Calculus)
  • 2024年【汽车修理工(高级)】考试试卷及汽车修理工(高级)证考试
  • uniapp vue里按钮上的文字,换行的方法,用rich-text
  • 人工智能(AI)和机器学习(ML)技术学习流程
  • macOS 下的 ARM 裸机嵌入式开发入门- 第二部分:实现第一个裸机应用并且调试
  • EPICS modbus 模块数字量读写练习
  • 分类与群组:解析分类和聚类分析技术
  • Kubernetes入门笔记——(2)k8s设计文档
  • java之stringbuf
  • 【9】PyQt对话框
  • Ubuntu 20.04 安装 mysql8 LTS
  • 【AI-ChatGPT-Prompt】什么是Prompt
  • Redis生产实战-热key、大key解决方案、数据库与缓存最终一致性解决方案
  • Centos7如何安装MySQL
  • HBase-架构与设计
  • 面试冲刺 - 算法题 1
  • 大数据生态架构:探索未来科技的无限可能。
  • Word文件设置了只读模式,为什么还能编辑?
  • 开发重要网站
  • 同旺科技 USB TO RS-485 定制款适配器--- 拆解(四)
  • 要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 4 章:控制温度和 Top-p 采样
  • k8s 安装 Longhorn
  • 【数据结构】动态规划(Dynamic Programming)
  • qt 5.15.2 网络文件下载功能
  • Pair<T, U>