java调用window的cmd的ping指令

/k 指keep 不会结束cmd进程而会继续等输入/c 指close 执行完即结束故cmdText改为:String cmdText="cmd.exe /c start ping  "+strIpName; 另外好像直接写cmdText = "ping "+strIpName不行吗?ping是外部命令好像不用非用cmd起吧。 -------------------------------------------

Java代码 复制代码 收藏代码
import java.io.InputStream;
public class Ping {
public static void main(String[] args) throws Exception { Runtime run = Runtime.getRuntime();
String cmdText = "ping 127.0.0.1";
Process process = run.exec(cmdText);
process.waitFor();
byte[] buffer = new byte[256];
int cnt = 0;
InputStream is = process.getInputStream();
while((cnt=is.read(buffer))>=0) {
System.out.print(new String(buffer,0,cnt));
}
}}
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class CallCmd {
public static void main(String[] args) {
BufferedReader br = null;
try {
Process p = Runtime.getRuntime().exec("ping 127.0.0.1");
br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
StringBuilder sb=new StringBuilder();
while ((line = br.readLine()) != null) { sb.append(line+"\n");
}
System.out.println(sb.toString());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (Exception e) { e.printStackTrace();
}
}
}   

测试可行----------------------- 
正在 Ping 127.0.0.1 具有 32 字节的数据: 
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=128 
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=128 
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=128 
来自 127.0.0.1 的回复: 字节=32 时间<1ms TTL=128 

127.0.0.1 的 Ping 统计信息:    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),往返行程的估计时间(以毫秒为单位):    最短 = 0ms,最长 = 0ms,平均 = 0ms 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/*
 * 这段代码写了3种Java实现ping命令的方法
 * */
public class Ping {

    public static boolean ping(String ipAddress) throws Exception {
        int  timeOut =  3000 ;  //超时应该在3钞以上
        boolean status = InetAddress.getByName(ipAddress).isReachable(timeOut);     // 当返回值是true时,说明host是可用的,false则不可。
        return status;
    }

    public static void ping02(String ipAddress) throws Exception {
        String line = null;
        try {
            Process pro = Runtime.getRuntime().exec("ping " + ipAddress);
            BufferedReader buf = new BufferedReader(new InputStreamReader(
                    pro.getInputStream()));
            while ((line = buf.readLine()) != null)
                System.out.println(line);
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }

    public static boolean ping(String ipAddress, int pingTimes, int timeOut) {
        BufferedReader in = null;
        Runtime r = Runtime.getRuntime();  // 将要执行的ping命令,此命令是windows格式的命令
        String pingCommand = "ping " + ipAddress + " -n " + pingTimes    + " -w " + timeOut;
        try {   // 执行命令并获取输出
            System.out.println(pingCommand);
            Process p = r.exec(pingCommand);
            if (p == null) {
                return false;
            }
            in = new BufferedReader(new InputStreamReader(p.getInputStream()));   // 逐行检查输出,计算类似出现=23ms TTL=62字样的次数
            int connectedCount = 0;
            String line = null;
            while ((line = in.readLine()) != null) {
                connectedCount += getCheckResult(line);
            }   // 如果出现类似=23ms TTL=62这样的字样,出现的次数=测试次数则返回真
            return connectedCount == pingTimes;
        } catch (Exception ex) {
            ex.printStackTrace();   // 出现异常则返回假
            return false;
        } finally {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    //若line含有=18ms TTL=16字样,说明已经ping通,返回1,否則返回0.
    private static int getCheckResult(String line) {  // System.out.println("控制台输出的结果为:"+line);
        Pattern pattern = Pattern.compile("(\\d+ms)(\\s+)(TTL=\\d+)",    Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(line);
        while (matcher.find()) {
            return 1;
        }
        return 0;
    }
    public static void main(String[] args) throws Exception {
        String ipAddress = "127.0.0.1";
        System.out.println(ping(ipAddress));
        ping02(ipAddress);
        System.out.println(ping(ipAddress, 5, 5000));
    }
}
时间: 2024-09-13 21:46:34

java调用window的cmd的ping指令的相关文章

JAVA调用Linux/Unix CMD

本文主要想说明:在开发过程中,要善于利用JAVA面向对象编程的优势,与Linux/Unix Shell命令的优势,并将二者相结合. JAVA代码: package shuai.study.cmd; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import java.util.List; import org.apache.commons.io.IOUtils; public

java 调用cmd 执行读取sql文件问题?求大神帮看下

问题描述 java 调用cmd 执行读取sql文件问题?求大神帮看下 Runtime run =Runtime.getRuntime(); Process process = run.exec("cmd /cmysql -u root -pssdlh test <d:/test.sql"); InputStreamReader ir = new InputStreamReader(process .getInputStream()); LineNumberReader input

关于java调用openstack提供的curl指令

问题描述 求帮助:有人尝试过java调用openstack提供的curl指令吗?怎么调用呢? 解决方案 解决方案二:用过,可以这么调用:curl-XPOSThttp://10.11.83.139:5000/v2.0/tokens-d'{"auth":{"passwordCredentials":{"username":"admin","password":"letmein"}}}'-H&

Windows系统中Java调用cmd命令及执行exe程序的方法_java

Java调用cmd命令,并输出显示信息: package com.anxin.cmd.test; import java.io.BufferedReader; import java.io.InputStreamReader; public class Command { public static void main(String[] args) { try { Runtime rt = Runtime.getRuntime(); Process pr = rt.exec("cmd /c di

求助!Java调用批处理文件后无法执行

问题描述 求助!Java调用批处理文件后无法执行 我想用Java调用批处理打开.exe安装包,但是安装包无法打开或者说直接跳过了打开 上面是我的Java代码 执行后没有打开.exe文件!但是我单独打开批处理文件就完全没问题 这是我的批处理文档! 哪位大神帮帮忙啊!!!! 解决方案 java 执行批处理文件window下java执行批处理文件 解决方案二: 既然是执行 cmd ,你的BAT里为什么还要pause? 然后,你的 command = "cmd /c zidong.bat";就

java-关于用Java调用dos,有些命令可以,有些就不行

问题描述 关于用Java调用dos,有些命令可以,有些就不行 我用swing做了一个窗体,可以输入dos命令,然后在文本域控件输出结果,像ping命令这些可以成功,但输入java.java -version这些就完全没反应 解决方案 看什么命令,java.java是不是在当前路径,要么添加到环境变量,要么带上完整路径. 解决方案二: Java调用DOS命令java调用Dos命令java 调用DOS命令 解决方案三: 核心代码是这样 runtime.getruntime().exec(csd)//

如何使用java调用python下载网页

本篇参考:http://tonl.iteye.com/blog/1918245 python版本:2.7 64bit window版本: 下载python:http://www.python.org/getit/ Python 2.7.5 Windows X86-64 Installer (Windows AMD64 / Intel 64 / X86-64 binary [1] -- does not include source),进行安装: 首先编写下面的spider.py脚本: # -*-

如何用java调用bartender打印条码

问题描述 如何用java调用bartender打印条码 如何用java调用bartender打印条码如何用java调用bartender打印条码如何用java调用bartender打印条码 解决方案 java调用条码打印机指令进行打印 解决方案二: 同求.............

win7下cmd MSG/SERVER指令局域网消息传输

问题描述 win7下cmd MSG/SERVER指令局域网消息传输 家里有两台电脑都是win7的在同一个局域网内,突发奇想想试试原来的net send指令相互发送消息.上网查证后发现win7后变成了msg/server.于是开始搞.但是按照网上大神的步骤后始终只能从台式机子发消息给笔记本(笔记本wifi链接的wlan)但是笔记本不能发消息给台式机子始终显示获取会话名称时的错误5.于是我打开了wireshark抓包发现如下(台式192.168.0.100,笔记本192.168.0.105)两个抓包