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();
|
}
|
}
|
|
}
|