• Java判断网络是否正常


    判断网络是否正常使用

    •       /**
           * 判断网络是否正常
           * @return
           */
          public static boolean isConnect(String ipPath){
              //定义其返回的状态,默认为false,网络不正常
              boolean connect = false;
              /**
               * 用Runtime.getRuntime().exec()来调用系统外部的某个程序,
               * 他会生成一个新的进程去运行调用的程序。
               * 此方法返回一个java.lang.Process对象,
               * 该对象可以得到之前开启的进程的运行结果,
               * 还可以操作进程的输入输出流。
               */
      
              Runtime runtime = Runtime.getRuntime();
              Process process;
              try {
                  process = runtime.exec("ping " + ipPath);
                  InputStream is = process.getInputStream();
                  InputStreamReader isr = new InputStreamReader(is,"GBK");
                  BufferedReader br = new BufferedReader(isr);
                  String line = null;
                  StringBuffer sb = new StringBuffer();
                  while ((line = br.readLine()) != null) {
                      sb.append(line);
                  }
                  System.out.println("返回值为:"+sb);
                  is.close();
                  isr.close();
                  br.close();
      
                  if (null != sb && !sb.toString().equals("")) {
                      String logString = "";
                      if (sb.toString().indexOf("TTL") > 0) {
                          // 网络畅通
                          connect = true;
                      } else {
                          // 网络不畅通
                          connect = false;
                      }
                  }
              } catch (IOException e) {
                  e.printStackTrace();
              }
              return connect;
          }

    TTL:生存时间
    指定数据报被路由器丢弃之前允许通过的网段数量。
    TTL 是由发送主机设置的,以防止数据包不断在 IP 互联网络上永不终止地循环。转发 IP 数据包时,要求路由器至少将 TTL 减小 1。
    使用PING时涉及到的 ICMP 报文类型
    一个为ICMP请求回显(ICMP Echo Request)
    一个为ICMP回显应答(ICMP Echo Reply)
    TTL 字段值可以帮助我们识别操作系统类型

    测试

     
       public static void main(String[] args) {
            System.out.println(HttpUtil.isConnect("220.181.111.188"));
    
        }

    控制台显示

    返回值为:正在 Ping 220.181.111.188
    具有 32 字节的数据:
    来自 220.181.111.188 的回复: 字节=32 时间=23ms TTL=53
    来自 220.181.111.188 的回复: 字节=32 时间=23ms TTL=53
    来自 220.181.111.188 的回复: 字节=32 时间=24ms TTL=53
    来自 220.181.111.188 的回复: 字节=32 时间=23ms 
    TTL=53220.181.111.188 的 Ping 统计信息:    
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
    往返行程的估计时间(以毫秒为单位):    
    最短 = 23ms,最长 = 24ms,平均 = 23ms
    
    true
    
    Process finished with exit code 0

     公众号:摘星族

  • 相关阅读:
    VS生成事件时复制文件到指定位置
    Windows服务BAT命令-安装、卸载、启动、停止
    Lambda表达式动态组装查询条件
    动软模板使用流程
    使用jquery.qrcode生成二维码
    MySQL报错:Packets larger than max_allowed_packet are not all
    Excel操作之VLOOKUP函数
    Visual Studio 编辑器打开项目后,一直提醒Vs在忙,解决方法
    使用BaiDu Java Script Web Api 在Web开发中嵌入地图使用步骤
    C#或Net连接Oracle操作提示 Oracle 客户端 version 8.1.7 或更高版本报错
  • 原文地址:https://www.cnblogs.com/zhaixingzhu/p/12562954.html
Copyright © 2020-2023  润新知