package com.dev.data; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.Date; import com.base.BaseData; import com.base.Com; import com.base.ComBase; import com.base.ComFn; /** * É豸ÊÚʱÏß³Ì * @author LiJun * */ public class Device_Timing_Thread implements Runnable{ public static Date dev_time = new Date(); //ÊÚʱʱ¼äºÍµ±Ç°Ê±¼ä×î´óʱ¼ä¼ä¸ô,±ÜÃâÒòΪÔÚÊÚʱʱ³öÏÖ´íÎóµÄʱ¼äÊÚʱ public static final int MAX_DEVTIME_LONG = 365*24*60*60; //ÊÚʱʱ¼äºÍµ±Ç°Ê±¼ä±ØÐëСÓÚÒ»Äê public static final int server_port = 8888; public static final int MAX_DATA_COUNT = 0x14; //ÊÚʱUDP±¨ÎÄÖ»ÓÐ20×Ö½Ú @Override public void run() { System.out.println("Device_Timing_Thread start at "+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms)); try { byte[] data = null; while(true) { DatagramSocket ds = null; try { data = new byte[MAX_DATA_COUNT]; DatagramPacket packet = new DatagramPacket(data, data.length); ds = new DatagramSocket(server_port); while (true) { ds.receive(packet); BaseData basedata = new BaseData(); ByteBuffer bf = ByteBuffer.allocate(20); bf.order(ByteOrder.LITTLE_ENDIAN); bf.put(data); bf.flip(); //System.out.println(ComFn.bytesToHexString(data, data.length)); if(basedata.putDeviceTimeByteBuffer(bf)) { //System.out.println(Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms)); //System.out.println(Com.getDateTimeFormat(basedata.getDevTime(), Com.DTF_YMDhms)); //System.out.println("¸üÐÂϵͳʱ¼ä£º"+Com.getDateTimeFormat(basedata.getDevTime(), Com.DTF_YMDhms)); long timelong = Math.abs((new Date().getTime()-basedata.getDevTime().getTime()))/1000; if(timelong < MAX_DEVTIME_LONG) { //¸üÐÂϵͳʱ¼ä updateSysDateTime(Com.getDateTimeFormat(basedata.getDevTime(), Com.DTF_YMD), Com.getDateTimeFormat(basedata.getDevTime(), Com.DTF_hms)); }else { //½ÓÊÕµ½´íÎóÊÚʱʱ¼ä°ü System.out.println(packet.getSocketAddress().toString()+"´íÎóÊÚʱʱ¼ä:"+Com.getDateTimeFormat(basedata.getDevTime(), Com.DTF_YMDhms)+" at ±¾»úʱ¼ä:" + Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms)); } //System.out.println(timelong); } Thread.sleep(10); } } catch (Exception e) { Thread.sleep(1000); e.printStackTrace(); } finally { //ÒâÍâÇé¿öÏÂÊÍ·Å¶Ë¿Ú if(ds != null) { try { ds.close(); } catch (Exception e) { e.printStackTrace(); } } } } } catch (Exception e1) { e1.printStackTrace(); } finally { } } /** * ÐÞ¸Äϵͳʱ¼ä * yyyy-MM-dd HH:mm:ss * @param DataStr_ 2017-11-11 yyyy-MM-dd * @param TimeStr_ 11:11:11 HH:mm:ss */ public void updateSysDateTime(String dataStr_,String timeStr_){ try { String osName = System.getProperty("os.name"); // Window ϵͳ if (osName.matches("^(?i)Windows.*$")) { String cmd; // ¸ñʽ£ºyyyy-MM-dd cmd = " cmd /c date " + dataStr_; Runtime.getRuntime().exec(cmd); // ¸ñʽ HH:mm:ss cmd = " cmd /c time " + timeStr_; Runtime.getRuntime().exec(cmd); //System.out.println("windows ʱ¼äÐÞ¸Ä"); } else if (osName.matches("^(?i)Linux.*$")) { // Linux ϵͳ ¸ñʽ£ºyyyy-MM-dd HH:mm:ss date -s "2017-11-11 11:11:11" FileWriter excutefw = new FileWriter("/usr/updateSysTime.sh"); BufferedWriter excutebw=new BufferedWriter(excutefw); excutebw.write("date -s \"" + dataStr_ +" "+ timeStr_ +"\"\r\n"); excutebw.close(); excutefw.close(); String cmd_date ="sh /usr/updateSysTime.sh"; Runtime.getRuntime().exec(cmd_date); System.out.println("cmd :" + cmd_date + " date :" + dataStr_ +" time :" + timeStr_); //System.out.println("linux ʱ¼äÐÞ¸Ä"); } else { System.out.println("²Ù×÷ϵͳÎÞ·¨Ê¶±ð"); } } catch (IOException e) { e.getMessage(); } } }