@Overridepublic voidstart() {
ExecutorService pool=Executors.newCachedThreadPool();try{if(enable) {return;
}
enable= true;
serverSocket=newServerSocket(port);
Socket socket= null;
BufferedInputStream reader= null;
BufferedOutputStream writer= null;while(enable) {try{
socket=serverSocket.accept();//阻塞方法
socket.setSoTimeout(100000);//start byte example
reader = newBufferedInputStream(socket.getInputStream());
writer= newBufferedOutputStream(socket.getOutputStream());int totalChar = 84;byte[] body = new byte[totalChar];int len = reader.read(body, 0, 84);if (len
logger.error("收到包ERROR: " + new String(body, "UTF-8") + " 长度: " +len);
logger.info("收到包ERROR: " +ByteUtil.bytesToBit(body));
logger.info(ByteUtil.parseByte2HexStr(body));if (null != socket && !socket.isClosed()) {
socket.close();
}continue;
}else{
logger.info("收到包: " + new String(body, "UTF-8"));
logger.info(ByteUtil.bytesToBit(body));
logger.info(ByteUtil.parseByte2HexStr(body));
}
T409_car_collects dbcollect= new T409_car_collects(); //硬件数据存储在这个对象中
byte[] idBytes = new byte[17];
System.arraycopy(body,0, idBytes, 0, 17);
String id= newString(idBytes);
dbcollect.setTerminalid(id);//TODO
}catch(Exception e) {
logger.error("Parse socket error. ", e);if (null != socket && !socket.isClosed()) {
socket.close();
}
}
}
}catch(IOException e) {
logger.error("", e);
}finally{
pool.shutdown();
}
}
@Overridepublic voidstop() {
enable= false;if (null != serverSocket && !serverSocket.isClosed()) {try{
serverSocket.close();
}catch(IOException e) {
logger.error("close serverSocket err.", e);
}
}
}class Handler implementsRunnable {privateT409_car_collects collect;privateSocket socket;
Handler(T409_car_collects collect, Socket socket) {this.collect =collect;this.socket =socket;
}
@Overridepublic voidrun() {//TODO
System.out.println("serv handler: "+collect.getRemark());
logger.error(MessageFormat.format("Terminalid {0} is not exist.", collect.getTerminalid()));
T410_car_collects_log collect_log= newT410_car_collects_log();
BeanUtils.copyProperties(collect,collect_log);
BeanUtils.copyProperties(collect_log,collect);
t410_car_collects_logMapper.insertSelective(collect_log);
List ext =carownerService.getcar_runningdatabyterminalid(collect.getTerminalid());if(ext ==null){
t409_car_collectsMapper.insertSelective(collect);
}else{
collect.setId(ext.get(0).getId());
Date now= newDate();
collect.setUpdatetime(now);
t409_car_collectsMapper.updateByPrimaryKeySelective(collect);
}try{
PrintWriter pw= new PrintWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8"),true);
pw.println("back to client.");
pw.flush();
}catch(Exception e) {
logger.error("send back socket client err.", e);
}finally{try{
socket.close();
}catch(IOException e) {
logger.error("close socket err.", e);
}
}
}
}