Java检测网络有网、无网状态

Java如何检测网络是否有网、无网状态呢??

监听有网、无网状态。初步想了一下,开始我觉得就用Java的代码来实现,通过捕捉网络异常信息,来确认网络状态,后面想想网络的异常(Exception)是有很多种的,无法准确定位是不是有网、没网。

所以,能不能直接用win linux mac操作系统下的“ping”命令呢,很显然,是可以的。

思路:在Java程序中,调用本地操作系统ping命令,利用ping返回的报文对网络状态加以判断。简单、靠谱。

 

先看一下终端对指定机器ping的结果图:

 

下面是用Java Demo调用“ping”的执行效果,简单明了。

package simple.callback.network;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class PingDemo {
    /**
     * @param target_name IP地址或域名
     * @param out_time    超时间隔,单位为毫秒
     * @return
     * @throws IOException
     */
    public static boolean ping(String target_name, int out_time)
            throws IOException {

        Runtime runtime = Runtime.getRuntime();

        String ping_command = "ping " + target_name + " -w " + out_time;

        System.out.println("命令格式:" + ping_command);

        Process process = runtime.exec(ping_command);

        if (null == process)
            return false;

        BufferedReader bufferedReader = new BufferedReader(
                new InputStreamReader(process.getInputStream(), "UTF-8"));// windows下编码默认是GBK,Linux是UTF-8

        String line = null;

        while (null != (line = bufferedReader.readLine())) {

            System.out.println(line);

            if (line.startsWith("bytes from",3))
                return true;
            if (line.startsWith("from"))
                return true;
        }

        bufferedReader.close();

        return false;
    }

    public static void main(String[] args) throws IOException {
        System.out.println(PingDemo.ping("127.0.0.1", 10));
        System.out.println("====================================");
        System.out.println(PingDemo.ping("docs.oracle.com", 10));
    }

}

 

 

运行效果1(断网):

运行效果2(网络正常):

 

这里主要使用的是jdk下类Runtime(java.lang.Runtime)java.lang.Runtime#exec(java.lang.String)方法的使用,Java™ Platform Standard Ed. 8说明文档文档如下

Process

exec(String command)

Executes the specified string command in a separate process.//在单独的进程中执行指定的字符串命令。  

perfect。

 

下面几个图的演示是结合线程来做一个网络检测任务示例( 仅供参考 ):

完整源码:pingsource.tar.gzpingsource_v2.tar.gzpingsource_v2.1.tar.gzpingsource_v2.2.tar.gzpingsource_v2.3.tar.gz

 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dnbug Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值