java实现ping功能

最近使用java做了一个简单的ping的程序,有两种方法可以用来实现
1.直接在java中调用批处理或者执行cmd命令
import java.io.IOException;


public class BatchProcess {




public static void main(String args[]) throws IOException
{
Runtime.getRuntime().exec("dir");
}
}
执行后,发现程序并没有被执行。
从网上查了,需要加入 Process 的waiteFor(),改变代码如下
import java.io.IOException;


public class BatchProcess {




public static void main(String args[]) throws IOException, InterruptedException
{
Process process=Runtime.getRuntime().exec("dir ");
process.waitFor();
}
}
问题又出现了,发现程序一直卡在waitFor()那里。waitFor()会一直等待process线程的终止,如果该线程未终止,则会造成线程的阻塞。可是为什么一个dos命令会造成线程的终止呢。网上参考其他人的解释是,该线程会不断的向标准输出和错误流中写入数据,而数据未被读取的话,最终造成缓冲区满,最终线程堵塞到这里。那就在代码中加入一个读取数据的buffer
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.Buffer;
public class BatchProcess {




public static void main(String args[]) throws IOException, InterruptedException
{
Process process=Runtime.getRuntime().exec("dir ");
BufferedReader bf=new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line;
        while((line=bf.readLine() )!= null)
        {
        System.out.println(line);
        }
process.waitFor();
}
}
再次执行,OK.
当然也可以用下面的代码实现
Runtime.getRuntime().exec("cmd /c start dir");
当然这样同样面临这阻塞的问题。
实现ping的功能还可以使用如下的代码,使用java.net.InetAddress中的isReachable()的方法,
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;


public class Te
{
public static void main(String args[]) throws IOException
{
byte ip[]={(byte)127,(byte)0,(byte)0,(byte)1};
InetAddress ia=InetAddress.getByAddress(ip);
if(ia.isReachable(3000))
{
System.out.println("OK");
}
else 
System.out.println("Sorry");
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值