使用Java检测互联网连接[重复]

2023-12-06

可能的重复:
如何检查java中是否存在互联网连接?

我想看看是否有人有一种简单的方法来检测使用 Java 时是否有互联网连接。当前的应用程序在 Windows 中使用了 WinInit DLL 中的“InternetGetConnectedState”方法,但我的应用程序需要跨平台才能进行 mac 操作,这种方式不起作用。我根本不知道 JNI,也不知道如何在 Java 中使用 DLL,而且它很快就变得令人沮丧。

我能想到的唯一方法是尝试打开到网站的 URL 连接,如果失败,则返回 false。我的另一种方式如下,但我不知道这是否总体稳定。如果我拔掉网络电缆,在尝试创建 InetAddress 时会收到 UnknownHostException。否则,如果连接了电缆,我会得到一个有效的 InetAddress 对象。我还没有在 Mac 上测试下面的代码。

感谢您提供的任何示例或建议。

更新:最终代码块位于底部。我决定采纳 HTTP 请求(在本例中为 Google)的建议。它很简单,并向站点发送请求以返回数据。如果我无法从连接中获取任何内容,则说明没有互联网。

public static boolean isInternetReachable()
        {
            try {

                InetAddress address = InetAddress.getByName("java.sun.com");

                if(address == null)
                {
                    return false;
                }

            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return false;
            }
            catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return false;
            }
            return true;
        }

最终代码块:

//checks for connection to the internet through dummy request
        public static boolean isInternetReachable()
        {
            try {
                //make a URL to a known source
                URL url = new URL("http://www.google.com");

                //open a connection to that source
                HttpURLConnection urlConnect = (HttpURLConnection)url.openConnection();

                //trying to retrieve data from the source. If there
                //is no connection, this line will fail
                Object objData = urlConnect.getContent();

            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return false;
            }
            catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return false;
            }
            return true;
        }

这是解决问题的完全合理的方法。不好的是,您实际上是在测试 DNS,而不是测试整个网络,但在实践中,您通常可以将它们视为等效的。

另一件要记住的事情是,您需要设置一个系统属性来关闭 java 运行时中的 dns 缓存。否则,它可能会根据缓存的数据继续报告网络已启动(即使网络已关闭)。

另一种方法是经常向某个网络地址(例如此地址)实际打开 HTTP 请求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Java检测互联网连接[重复] 的相关文章

  • 我可以确定谁在调用 Java 中的函数或实例化类吗? [复制]

    这个问题在这里已经有答案了 可能的重复 在Java中 如何使用堆栈跟踪或反射找到方法的调用者 https stackoverflow com questions 421280 in java how do i find the caller
  • 使用 Maven 生成 Eclipse 项目文件

    当我尝试使用生成 Eclipse 项目文件时mvn eclipse eclipse我收到以下错误 插件管理器执行目标时出现内部错误 org apache maven plugins maven eclipse plugin 2 9 SNAP
  • Java 字符串哈希码缓存

    字符串不变性的优点之一是哈希码缓存以实现更快的访问 在这种情况下 如何处理具有相同哈希码的字符串的缓存 在这种情况下它真的能提高性能吗 在这种情况下 如何处理具有相同哈希码的字符串的缓存 被缓存的是字符串的哈希码 它被缓存在私有的int字符
  • jvm中本机代码如何转换为机器代码[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我读过一些文章说 jvm将字节码转换为机器码 jvm将字节码转换为本机代码 jvm 将字节码转换为系统调用 系统调用又由操作系统与硬件
  • Glassfish:在部署期间修改 EAR 的部署描述符

    经过几天的搜索 尝试和摇头 我将这个问题发布到 SO 尽管它seems已经得到答复 这是场景 我有一个 EAR 应用程序 目前 包含一个 WAR 和一个 EJB 模块 EJB 模块使用 JPA persistence xml 并且一些无状态
  • 从字符串生成密钥?

    我需要从字符串生成一个密钥 以便我始终可以从同一字符串创建相同的密钥 具体来说是一个Key对象 这样我就可以用它来创建Cipher进而创建SealedObject 这在 Java 中可行吗 我应该考虑什么类 方法组合才能做到这一点 对于 A
  • wp7如何查看网络连接情况?

    我想检查我的应用程序中的互联网连接 但是 它无法正确显示 我正在使用此代码进行互联网连接 NetworkInterface GetIsNetworkAvailable 在此代码中始终返回 true 值 如果网络可用或不可用 则仅返回 tru
  • AffineTransform.rotate() - 如何同时缩放、旋转和缩放?

    我有以下代码 它可以完成我想要绘制一个上面有一些棋子的棋盘的 第一部分 Image pieceImage getImage currentPiece int pieceHeight pieceImage getHeight null dou
  • c和java语言中的换行符

    现在行分隔符取决于系统 但在 C 程序中我使用 n 作为行分隔符 无论我在 Windows 还是 Linux 中运行它都可以正常工作 为什么 在java中 我们必须使用 n 因为它与系统相关 那么为什么我们在c中使用 n 作为新行 而不管我
  • 如何在 Java 中使用 StringUtils?

    我是 Java 初学者 我想用StringUtils replace但 Eclipse 输出 StringUtils cannot be resolved I tried import java lang 但它不起作用 java lang不
  • 如何在Java中打印保留2位小数的浮点数?

    我可以用System out print 您可以使用printf http java sun com j2se 1 5 0 docs api java io PrintStream html printf 28java lang Strin
  • 在 Java 中创建带注释的对象时收到通知

    Intent 我有一个自定义 Java 注释 DynamicField public class RESTEndpointInvoker DynamicField key httpTimeout private long httpTimeo
  • 反应式 Spring Webflux REST 控制器内部重定向

    我正在为 spring 反应项目创建简单的控制器服务器 在设置重定向到另一个位置时 我在调用时发现错误http localhost 8080 There was an unexpected error type Internal Serve
  • 使用 Box2d(适用于 Android)进行碰撞检测?

    有人可以解释一下使用 box2d for android 进行碰撞检测的工作原理吗 我无法理解 BBContactListener 以什么方式工作 BBContactListener listener new BBContactListen
  • bufferedinputstream 中标记读取限制有什么用

    我是Java流的新手 我想读取特定的文件内容 然后需要从头开始读取 我创建了一个 BufferedInputStream 但我对 BufferedInputStream mark int markLimit 的文档感到困惑 文档说 publ
  • 获取包中声明的所有 Java 类的名称

    我正在编写一个功能 它将有助于将类放入我的程序的某个包中 另外 我只想要子类某个类的类 我需要这些类才能调用它们的静态方法 有没有一种自动的方法来做到这一点 如果是的话 速度慢吗 如果我不清楚 我想要的是这样的 ArrayList
  • 如何使 JScrollPane 与嵌套 JPanel 一起正常工作?

    我正在使用 NetBeans 在 Java 中构建 Swing 应用程序 但我遇到布局问题 我的主框架包含一个JScrollPane其中包含一个JPanel called contentPanel其中又包含一个JPanel called l
  • 如何列出Resources文件夹中的所有文件(java/scala)

    我正在编写一个函数 需要访问资源中的文件夹 并循环遍历所有文件名 如果这些文件符合条件 则加载这些文件 new File getClass getResource images sprites getPath listFiles 返回空指针
  • Retrofit 2.0:预期为 BEGIN_OBJECT,但在第 1 行第 1 列路径 $ [重复] 处为 STRING

    这个问题在这里已经有答案了 我在邮递员上传递了更新用户请求并获得了成功的响应 参见图片 现在当我尝试使用 Retrofit 2 在我的应用程序中执行相同操作时 出现错误 com google gson JsonSyntaxException
  • 在没有EOF的情况下停止读取java中的输入

    In 问题 如何停止读取输入 我的程序继续运行 要求更多输入 public static void main String args throws Exception BufferedReader br new BufferedReader

随机推荐

  • 带分隔线的进度条

    有人可以向我解释如何实现带有分隔线的进度条 如下图所示吗 对于我正在使用的进度条https github com akexorcist Android RoundCornerProgressBar但这似乎没有分隔符选项 replace Pr
  • Spring Boot 和 JUnit 5 之间的交互——必须使用整体工件而不是个体?

    这个问题之前已经被问过 例如here 但我的观察与之前报道的不一样 我注意到要让 JUnit 5 工作 我必须包含整个 JUnit 5 工件 testImplementation org junit jupiter junit jupite
  • 我应该使用什么正则表达式根据 2 个单词格式和空格分割字符串?

    我正在尝试分割字符串 Chan 0 2 50 0 12 13 92 83 46 Chan 1 2 58 85 92 2 47 9 03 Chan 2 5 00 85 0 33 33 6 64 Chan 3 0 00 0 00 14 41 8
  • 如何获取已删除分区中索引节点在块设备中的偏移量

    在全新安装过程中 我不小心格式化了包含数据的磁盘 我尝试过使用一些工具 最重要的是testdisk 但我没有得到好的结果 看我不成功的帖子在超级用户上 所以我决定阅读一些有关的文档ext2 文件系统结构 我可以获得一些结果 删除的分区有一个
  • 为什么 Emoji 无法在 UITextField 中正确显示?

    当使用以下代码设置表情符号字符时 self textField text ue415 它只是显示为正方形 但是当我从键盘输入表情符号时 它会正确显示 有什么问题 PS 我使用的是IOS 5 1 在旧版本的 iOS 中 表情符号字符全部位于
  • 需要使用正则表达式屏蔽手机号码

    我使用了以下表达方式 replaceAll d d 4 X 在android studio中进行以下操作 Input 1234567809 Expected Output 12XXXXX809 使用上述表达式后得到的输出 XXXXXX780
  • 只能将 str (不是“字节”)连接到 str

    import socket import os user url input Enter url host name user url split 2 mysock socket socket socket AF INET socket S
  • MySQL:仅返回平面/对话消息表中的最后一条消息

    我正在编写一个消息系统 例如 Facebook 的新消息系统 其中两个用户之间的整个来回被视为一次对话 与传统电子邮件相反 传统电子邮件中的每个回复都是单独的消息 或者与 gMail 的对话相反 在 gMail 对话中 回复全部集中在一个对
  • Laravel 9 突变冒号

    在 Laravel 9 中 变异器有不同的实现 下面的例子来自官方文档 protected function firstName Attribute return Attribute make get fn value gt ucfirst
  • MIPS - 实现二叉搜索树

    作为我们的术语项目 我们正在实现一个二叉搜索树 其背后的想法如下 假设 bst 有 3 个节点 10 8 14 其地址表示如下 值 左节点地址 右节点地址 根节点地址 t 400 8 0 0 620
  • 在 pandas 中分解具有不同大小列表列的多列

    我有以下情况 我可能会在 csv 文件中获得 300 列 其中一些是列表参数 50 列 并且它们的大小可能不均匀 包括没有值 Time COL1 COL2 2020 03 13 10 43 00 500 0 0 10 0 20 0 30 0
  • php for循环变量名

    我得到了 100 200 条制作表格规则的代码 但整个时间都在发生同样的事情 我有一个变量 xm3 然后我创建一个列 下一行 我得到 xm2 并制作列 下一行 我得到 xm1 并制作列 所以我的变量将是 xm3 xm2 xm1 xm0 xp
  • Javascript 按大写字符拆分字符串

    在 JavaScript 中如何通过大写字符将字符串拆分为数组 所以我想分开 ThisIsTheStringToSplit into This Is The String To Split 我会这样做 match 像这样 ThisIsThe
  • POST 500(内部服务器错误)ajax,mvc

    我有 ajax 请求将数据发送到我的控制器 它收集我的下拉列表的值 错误是 POST http localhost 65070 form create 500 Internal Server Error 错误的响应是 The require
  • 如何通过phonegap打开iPhone应用程序

    我想从我的phonegap应用程序中打开联系人和日历等iPhone应用程序 我不介意这样做会将我的应用程序置于后台 我可以打开浏览器并使用 window open 但如何打开其他应用程序 eg window open contacts bl
  • 如何在 Android 中避免出现此消息

    我在 android 中收到以下错误消息 完成尚未停用或关闭的游标 数据库 data data com example Recipie databases recipedbase db 表 食谱 查询 从食谱中选择不同的标题 其中标题 My
  • 如何暂停线程执行

    如何暂停某些线程的执行 我有 Thread t 并且有两个按钮 暂停和继续 暂停时 我需要暂停线程执行 然后继续线程从之前停止的位置开始执行 听众中应该放什么 Java 中的线程是协作的 这意味着您不能强制线程停止或暂停 而是向线程发出您想
  • 如何打印格式化为网格的二维列表?

    目前 我已经编写了这段代码 def grid maker h w grid for i in range w for i in range h grid 0 0 o print grid gt gt gt grid maker 3 5 gt
  • 仅通过属性上的类型保护来细化父对象

    我有一个类型Box
  • 使用Java检测互联网连接[重复]

    这个问题在这里已经有答案了 可能的重复 如何检查java中是否存在互联网连接 我想看看是否有人有一种简单的方法来检测使用 Java 时是否有互联网连接 当前的应用程序在 Windows 中使用了 WinInit DLL 中的 Interne