Edesigner. 发表于 2018-11-9 16:50:40

关于程序如何判断是否连通了互联网。

网上提供的方法是,连接dns服务器,看是否有返回。比如,连接8.8.8.8的53端口,如果能正常连接说明可以上网。经过测试8.8.8.8不是很流畅,我修改为114.114.114.114的53端口。由于我应用里每10秒就检测一次。不知道服务器会不会把我的ip当作攻击把IP封锁?

wye11083 发表于 2018-11-9 16:59:55

不会。除非你达到几百kb连续流量

miaoguoqiang 发表于 2018-11-9 17:05:05

还有ping方法

Edesigner. 发表于 2018-11-9 17:10:37

miaoguoqiang 发表于 2018-11-9 17:05
还有ping方法

是不是ping会快点?

vtte 发表于 2018-11-9 17:16:10

114.114.114.114也不保险,我前几天刚经历了114.114.114.114,1.2.4.8,8.8.8.8 同时不能用的情况,浙江移动的网络。最好是以连接自己的服务器是否通畅为标准。

Edesigner. 发表于 2018-11-9 17:24:18

vtte 发表于 2018-11-9 17:16
114.114.114.114也不保险,我前几天刚经历了114.114.114.114,1.2.4.8,8.8.8.8 同时不能用的情况,浙江移 ...

会不会你的电脑,确实是断网了?哈哈

Edesigner. 发表于 2018-11-9 17:25:30

public staticString[] dnsipList=new String[]
{
        "114.114.114.114",
        "114.114.115.115",
        "1.2.4.8",
        "210.2.4.8",
        "101.226.4.6",
        "123.125.81.6",
        "8.8.8.8",//googleDNS
        "8.8.4.4",//googleDNS 后备       
};       

// ipAddress可以是IP或者是域名如:183.232.231.173或者www.baidu.com
public static boolean ping(String ipAddress) {
        int timeOut = 3000; // 超时应该在3钞以上
        boolean status = false;
        try {
                status = InetAddress.getByName(ipAddress).isReachable(timeOut);
        } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                log4j.error(e);
        } catch (IOException e) {
                // TODO Auto-generated catch block
                log4j.error(e);
        } // 当返回值是true时,说明host是可用的,false则不可。
        return status;
}

static boolean isOnline()
{
        for (int i=0; i<dnsipList.length; i++)
        {
                if (ping(dnsipList))
                {
                        return true;
                }
        }
        return false;
}

aozima 发表于 2018-11-9 17:29:54

ping百度
页: [1]
查看完整版本: 关于程序如何判断是否连通了互联网。