package seablog.reconet; import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; import java.text.SimpleDateFormat; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.Timer; import java.util.TimerTask; /** * 每分钟自动检测是否断网,若断网,便重启网卡 * <br> * Usage: java -jar RecoNet.jar -dev dev_id [-host ping_host] * <br> * 附:<a href="http://www.233.com/microsoft/zonghe/20110103/144530473.html">devcon.exe程序下载</a> */ public class RecoNet extends TimerTask { RecoNetConfig cfg; public RecoNet(RecoNetConfig cfg) { this.cfg = cfg; } /** * 网络是否正常 */ public boolean isConnected(String host) { try { InetAddress.getByName(host); return true; } catch (UnknownHostException e) { return false; } } public void disableDev(String dev) throws IOException { Runtime.getRuntime().exec("devcon disable " + dev); } public void enableDev(String dev) throws IOException { Runtime.getRuntime().exec("devcon enable " + dev); } static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); Set<String> runningSet = Collections.synchronizedSet(new HashSet<String>()); public void run() { try { // isRunning = true; String now = sdf.format(new Date()); if (runningSet.contains(now)) { System.out.println(now + " Already Run."); return; } if (runningSet.size() > 24 * 60) { runningSet.clear(); } runningSet.add(now); if (isConnected(cfg.getHost())) { System.out.println(now + " Ping OK.[" + cfg.getHost() + "]"); return; } System.out.println(now + " Reboot " + cfg.getDevID() + "."); disableDev(cfg.getDevID()); // 休眠5秒钟,等待disableDev执行... Thread.sleep(1000 * 5); enableDev(cfg.getDevID()); } catch (Throwable e) { e.printStackTrace(); } } static String ARG_HELP = "help"; static String ARG_DEV = "-dev"; static String ARG_HOST = "-host"; /** * 定时检测无线网络 */ public static void main(String[] args) { if (args.length == 0 || ARG_HELP.equalsIgnoreCase(args[0])) { System.out .println("Usage:\tjava -jar RecoNet.jar -dev dev_id [-host ping_host]"); System.out .println("e.g.\tjava -jar RecoNet.jar -dev *DEV_422C* -host baidu.com\n"); return; } Map<String, String> map = new HashMap<String, String>(); try { for (int i = 0; i < args.length; i += 2) { map.put(args[i].toLowerCase(), args[i + 1]); } } catch (IndexOutOfBoundsException e) { // do nothing } RecoNetConfig cfg = new RecoNetConfig(); if (map.get(ARG_DEV) != null){ cfg.setDevID(map.get(ARG_DEV)); } if (map.get(ARG_HOST) != null){ cfg.setHost(map.get(ARG_HOST)); } map.clear(); // 每分钟执行 new Timer().scheduleAtFixedRate(new RecoNet(cfg), 1000, 1000 * 60); } }
package seablog.reconet; public class RecoNetConfig { /** * 网卡标识 */ String devID = "*DEV_422C*"; /** * 用于测试是否断网 */ String host = "baidu.com"; public String getDevID() { return devID; } public void setDevID(String devID) { this.devID = devID; } public String getHost() { return host; } public void setHost(String host) { this.host = host; } }