packagecom.as.util;importjava.io.IOException;importjava.net.DatagramPacket;importjava.net.DatagramSocket;importjava.net.InetAddress;importjava.net.InetSocketAddress;importjava.sql.SQLException;importjava.util.ArrayList;importjava.util.Date;importjava.util.List;importjava.util.TimerTask;importjava.util.concurrent.CountDownLatch;importtimetrigger.JDBC1;importcom.as.bean.Schedule;importcom.as.bean.SearchCardRecordBean;/*** 用来监听读卡器的主类
*
*@authorwangqing
**/
public class OpenCrMain extendsTimerTask {private static InetSocketAddress socketAddress = null; //服务监听地址
private static DatagramSocket datagramSocket = null; //连接对象
public static String ServiceIp = "192.168.2.101";public static int ServicePort = 32500;public static List sendIpList = new ArrayList();privateSchedule schedule;static List scrb = new ArrayList();//被怀疑迟到的人
publicOpenCrMain(Schedule schedule) {this.schedule =schedule;
}/*** 初始化连接
*@throwsSocketException*/
public static voidinit() {try{
socketAddress= newInetSocketAddress(ServiceIp, ServicePort);
datagramSocket= newDatagramSocket(socketAddress);
datagramSocket.setSoTimeout(60 * 1000);
System.out.println("服务端已经启动");
}catch(Exception e) {
datagramSocket= null;
System.err.println("服务端启动失败");
e.printStackTrace();
}
}
@Overridepublic voidrun() {
openCrAndReadIt();
}/*** 接收数据包,该方法会造成线程阻塞
*@return*@throwsException
*@throwsIOException*/
public synchronized staticDatagramPacket receive(DatagramPacket packet)throwsException {try{
datagramSocket.receive(packet);returnpacket;
}catch(Exception e) {
System.out.println("抛出异常");throwe;
}
}/*** 将响应包发送给请求端
*@parambt
*@throwsIOException*/
public synchronized static voidresponse(DatagramPacket packet) {try{
datagramSocket.send(packet);
}catch(Exception e) {
e.printStackTrace();
}
}/*** 打开读卡器并分析数据*/
public synchronized voidopenCrAndReadIt() {try{
scrb= newJDBC1().searchDoubtLate(schedule.getScheduleID(),
schedule.getBeginTime(), schedule.getEndTime());//得出某个特定的班缺勤嫌疑人人员列表
for (int i = 0; i < scrb.size(); i++) {
scrb.get(i).setSearchResult("未找到");
}
init();byte[] buffer = new byte[1024 * 64]; //缓冲区
List iplist=new ArrayList();
iplist.add("192.168.2.202");
CountDownLatch threadSignal= new CountDownLatch(iplist.size());//初始化countDown
for(String string : iplist) {
DatagramPacket packet= new DatagramPacket(buffer, buffer.length,InetAddress.getByName(string),32500);//开启线程对数据进行分析
newAnalysisDataFromCr(threadSignal,packet).start();
}
threadSignal.await();//等待所有子线程执行完
datagramSocket.close();for(int i=0;i
System.out.println(scrb.get(i).getSerial_Nr());
}new JDBC1().add1(scrb);//匹配完后把结果添加到数据库中
System.out.println("添加完成");
}catch(Exception e) {
System.out.println("抛出异常");
}
}
}