1、查了很多资料最终就两种可行方案

1、通过ping方式


public static  boolean isNetworkOnline() {
        Runtime runtime = Runtime.getRuntime();
        try {
            Process ipProcess = runtime.exec("ping -c 3 114.114.114.114");
            int exitValue = ipProcess.waitFor();
            return (exitValue == 0);
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
        return false;
    }

2、通过socket检查


/**
     * 通过socket检查外网的连通性
     */
    private static Socket s ;
    public static boolean hasNetworkConnection(Context context){
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        boolean connected = (null != activeNetworkInfo) && activeNetworkInfo.isConnected();
        if(!connected) return false;
        boolean routeExists ;
        try {
            if(s==null){
                s = new Socket();
            }
            InetAddress host = InetAddress.getByName("114.114.114.114");//国内使用114.114.114.114,如果全球通用google:8.8.8.8
            s.connect(new InetSocketAddress(host,80),5000);//google:53
            routeExists = true;
            s.close();
        } catch (IOException e) {
            routeExists = false ;
        }

        return connected && routeExists ;
    }

3.通过域名查找ip地址

/**
     * 解析域名获取IP数组
     * @param host
     * @return
     */
    public static String[] parseHostGetIPAddress(String host) {
        String[] ipAddressArr = null;
        try {
            InetAddress[] inetAddressArr = InetAddress.getAllByName(host);
            if (inetAddressArr != null && inetAddressArr.length > 0) {
                ipAddressArr = new String[inetAddressArr.length];
                for (int i = 0; i < inetAddressArr.length; i++) {
                    ipAddressArr[i] = inetAddressArr[i].getHostAddress();
                }
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
            return null;
        }
        return ipAddressArr;
    }



解释:


114.114.114.114和8.8.8.8,哪个DNS好?

一、两者的联系



  114.114.114.114和8.8.8.8,这两个IP地址都属于公共域名解析服务DNS其中的一部分,而且由于不是用于商业用途的,这两个DNS都很纯净,不用担心因ISP运营商导致的DNS劫持等问题,而且都是免费提供给用户使用的。

  二、二者的区别

  1、114.114.114.114

  114.114.114.114是国内移动、电信和联通通用的DNS,手机和电脑端都可以使用,干净无广告,解析成功率相对来说更高,国内用户使用的比较多,而且速度相对快、稳定,是国内用户上网常用的DNS

  2、8.8.8.8

  8.8.8.8是GOOGLE公司提供的DNS,该地址是全球通用的,相对来说,更适合国外以及访问国外网站的用户使用

  三、如何合理选择DNS

  DNS对于网民来说,就跟灯塔和航海人员的道理是一样的,选择合理的DNS可以有效的帮助我们防止DNS劫持、提升上网速度等,那么,如何合理的选择DNS呢?

  1、选择本地干净的DNS

  目前世界上的大中型网站都是采用CDN做内容分发的,从而可以确保用户就近的接入、提升访问速度,不少的网站会使用DNS作为识别,因此,如果本人在北京,却选择了上海的DNS,就有可能会被网站认为是上海的用户而引导到上海的服务器上去。

  不过所幸,现在的不少网站都根据IP地址来引导用户的。

  2、选择安全无毒、免费的DNS

  目前国内有不少的免费、安全而且无毒的DNS,常见的如百度提供的180.76.76.76、阿里提供的223.5.5.5和223.6.6.6、前文提到的114.114.114.114

  四、如何设置电脑的DNS

  1、点击控制面板,点击网络和internet

  2、进入后点击更改适配器设置,右键“无线网络连接”选择“属性”

  3、在:“此连接使用下列项目”中把“internet协议(TCP/IPV6)”前面的“对号”去掉

  4、双击 “internet协议(TCP/IPV4)”,出现属性对话框自动获取IP地址不变

  DNS地址:选择“使用下面的DNS服务器地址”,手动填写DNS服务器地址,首选为180.76.76.76;备用为114.114.114.114(或不填)

  5、点击确定

百度链接:https://zhidao.baidu.com/question/304558434158495364.html