当前位置: 首页 > 面试题库 >

使用Java检测互联网连接

楚知
2023-03-14
问题内容

我想看看是否有人在使用Java时有一种简单的方法来检测是否存在Internet连接。当前的应用程序在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请求。



 类似资料:
  • 问题内容: 当我尝试在iPhone上检查互联网连接时,出现了很多错误。谁能帮我解决这个问题? 代码: 代码错误: 如果无法读取,则错误1表示: “ Int”不可转换为“ SCNetworkReachabilityFlags” 错误2和3: 找不到接受提供的参数的’init’的重载 问题答案: 为了解决注释中提到的4G问题,我已使用@AshleyMills可达性实现作为参考并重写了Swift 3.1

  • 进行与互联网间的连接测试,并显示结果。 名称* 目前使用的互联网连接之连接名称 SSID* 接入点的SSID 获取IP地址 显示是否可获取IP地址 互联网连接 显示是否可与互联网连接 登陆PlayStation®Network 显示是否能登陆PlayStation®Network NAT类型 显示PS Vita与互联网的连接方式 使用游戏的通信功能等时,可确认与其它PS Vita间的连接稳定性。

  • 问题内容: 在Java中能否确定可用的总CPU速度以及系统总内存?到网络的网络连接速度也很棒。 问题答案: 这实际上取决于您的操作系统,因为Java将告诉你 一点 关于底层机器。不幸的是,根据您的操作系统,您必须使用不同的方法。 如果您使用的是Linux,请查看文件系统以获取CPU信息。通常具有丰富的信息。网络(IO)将通过命令反映出来。 如果您使用的是Windows,WMI是一个有用的工具,它可

  • 你好,我有一个应用程序,有两个活动:主页面和详细页面。 当有互联网连接时,用户可以从主页面导航到详细信息页面。当没有网络连接时,他不能这样做。 问题是:当我进入详细信息页面并关闭wifi时,我想完成此活动,我如何实现此功能?我在主要活动类中检查过类似这样的内容: 当我启动有互联网或没有互联网的应用程序时,它都可以正常工作,但是当我在运行时关闭wifi时,它不起作用。 无论如何,谢谢你!

  • 若要使用PS Vita与互联网连接,需先准备无线通信的环境。 若您的住家等地无法通过无线通信,可使用公众无线LAN服务(Hotspot)在公众场所与互联网连接。 公众无线LAN服务的使用方法与费用会因该服务的提供者而异。详细请询问该服务的提供者。 使用Wi-Fi连接 若要使用Wi-Fi与互联网连接,需准备以下内容。此外,接入点的设定通常会通过电脑进行。 与网络服务商签订合约 接入点或无线路由器 接

  • 我需要检查的设备是否有互联网连接,我搜索一些例子,但当我复制和粘贴的代码,我总是得到错误或不推荐的函数。我也不明白我必须把检查连接的方法放在哪里,因为我需要检查viewModel中的internet连接来发出一些请求,而我找到的所有方法都在参数中有上下文,而我无法在viewModel中获得上下文。 我尝试了这段代码,但我不明白我必须把它放在哪里,我得到 有人能给我解释一下怎么开这张支票吗?