packagenh;importjava.io.*;importjava.net.InetAddress;importjava.util.*;publicclassIp{staticpublicHashMapping;//ping后的结果集publicHashMapgetPing(){//用来得到ping后的结果...
package nh;
import java.io.*;
import java.net.InetAddress;
import java.util.*;
public class Ip {
static public HashMap ping; // ping 后的结果集
public HashMap getPing() { // 用来得到ping后的结果集
return ping;
}
// 当前线程的数量, 防止过多线程摧毁电脑
static int threadCount = 0;
public Ip() {
ping = new HashMap();
}
public void Ping(String ip) throws Exception {
// 最多30个线程
while (threadCount > 30)
Thread.sleep(50);
threadCount += 1;
PingIp p = new PingIp(ip);
p.start();
}
public void PingAll() throws Exception {
// 首先得到本机的IP,得到网段
InetAddress host = InetAddress.getLocalHost();
String hostAddress = host.getHostAddress();
int k = hostAddress.lastIndexOf(".");
String ss = hostAddress.substring(0, k + 1);
for (int i = 2; i <= 10; i++) { // 对所有局域网Ip
String iip = ss + i;
Ping(iip);
}
// 等着所有Ping结束
while (threadCount > 0)
Thread.sleep(50);
}
public class PingIp extends Thread {
public String ip; // IP
public PingIp(String ip) {
this.ip = ip;
}
public void run() {
Process p;
try {
p = Runtime.getRuntime().exec("ping " + ip + " -w 1000 -n 1");
InputStreamReader ir = new InputStreamReader(p.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
// 读取结果行
for (int i = 1; i < 3; i++) {
input.readLine();
}
String line = input.readLine();
if (line.indexOf("超时") > -1)
ping.put(ip, "false");
else
ping.put(ip, "true");
// 线程结束
threadCount -= 1;
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws Exception {
Ip ip = new Ip();
new Timer().schedule(new TimerTask() {
@Override
public void run() {
try {
ip.PingAll();
java.util.Set entries = ping.entrySet();
Iterator iter = entries.iterator();
String k;
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
String key = (String) entry.getKey();
String value = (String) entry.getValue();
System.out.println(new Date()+" "+key + "-->" + value);
}
System.out.println("--------------------------");
} catch (Exception e) {
e.printStackTrace();
}
}
}, 0, 1000);
}
}
想运行代码,最好把String ss = "172.27.35.";替换原来的String ss = hostAddress.substring(0, k + 1);;反正效果是一样的。大神,在哪里???代码运行到一半运行不下去,详情见下图,急求解释!!!望大神赐教,不胜感激!!!
SOS SOS SOS SOS SOS SOS SOS SOS SOS SOS SOS SOS SOS SOS SOS
展开