package com.dev.data;
|
|
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.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
import com.base.BaseData;
|
import com.base.Com;
|
import com.base.ComBase;
|
import com.base.ComFn;
|
import com.config.AppConfig;
|
import com.sql.MysqlConnPool;
|
|
/**
|
* ÆûÂÖ·¢µç»úUDP±¨ÎĽÓÊÕ³ÌÐò
|
* @author LiJun
|
*
|
*/
|
public class SteamTurbineUDPServer_Thread implements Runnable{
|
|
public MysqlConnPool conn_pool;
|
public List<Device_inf> devices;
|
public List<ConfigData> cfgdatas;
|
public AppConfig cfg;
|
|
public static final int server_port = 6001;
|
public static final int MAX_DATA_COUNT = 512; //×î´óÊý¾Ý°ü³¤¶È
|
|
public SteamTurbineUDPServer_Thread(MysqlConnPool conn_pool,List<Device_inf> devices,List<ConfigData> cfgdatas,AppConfig cfg) {
|
this.conn_pool = conn_pool;
|
this.devices = devices;
|
this.cfgdatas = cfgdatas;
|
this.cfg = cfg;
|
}
|
|
@Override
|
public void run() {
|
System.out.println("SteamTurbineUDPServer_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);
|
byte[] headCount = new byte[2];
|
System.arraycopy(data, 0, headCount, 0, headCount.length);
|
//System.out.println("Êý¾Ý°ü³¤¶È"+createPackHeadCount(data));
|
BaseData basedata = new BaseData();
|
ByteBuffer bf = ByteBuffer.allocate(createPackHeadCount(data));
|
if(createPackHeadCount(data) > data.length) {
|
continue; //¹ýÂ˳¬±êÊý¾ÝÖ¡
|
}
|
bf.order(ByteOrder.LITTLE_ENDIAN);
|
bf.put(data,0,createPackHeadCount(data));
|
bf.flip();
|
//System.out.println(ComFn.bytesToHexString(data, createPackHeadCount(data)));
|
if(basedata.putSteamTurByteBuffer(bf,cfg.isEquie_device_udppackage_cheak())) {
|
String client_ip = packet.getSocketAddress().toString();
|
RecordUDPPackage.RecordUDPPackageData(RecordUDPPackage.PackageType_SteamTurbine, client_ip, bf.array());
|
|
SteamTurbine_Thread steam_thread = new SteamTurbine_Thread(conn_pool, devices,cfgdatas,basedata);
|
new Thread(steam_thread).start();
|
//System.out.println(basedata);
|
}
|
//²âÊÔ³ÌÐò½ÓÊÕÒì³£Çé¿öÏÂ,ÊÇ·ñÄÜÕý³£ÔËÐÐ
|
//System.out.println(1/0);
|
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 {
|
|
}
|
}
|
|
/**
|
* »ñÈ¡Êý¾ÝÍ·µÄ³¤¶È
|
* @param b
|
* @return
|
*/
|
public static int createPackHeadCount(byte[] b) {
|
ByteBuffer bf = ByteBuffer.allocate(b.length);
|
bf.order(ByteOrder.LITTLE_ENDIAN);
|
bf.put(b);
|
bf.flip();
|
return ComBase.changeShortToInt(bf.getShort());
|
}
|
}
|