Java Socket background create a data service receiving terminal hardware sent

Recent projects have needs met backstage to receive data sent by the terminal hardware store and parse the code are summarized as follows (time to explain one by one again, busy recently):

@Override
    public void start() {
        ExecutorService pool = Executors.newCachedThreadPool();
        try {
            if (enable) {
                return;
            }
            enable = true;
            serverSocket=new ServerSocket(port);
            Socket socket = null; 
            BufferedInputStream reader = null;
            BufferedOutputStream writer = null;
            while (enable) {
                try {
                    socket=serverSocket.accept();//阻塞方法
                    socket.setSoTimeout(100000);
                    
                    // start byte example
                    reader = new BufferedInputStream(socket.getInputStream());
                    writer = new BufferedOutputStream(socket.getOutputStream());
                    int totalChar = 84;
                    byte[] body = new byte[totalChar];
                    int len = reader.read(body, 0, 84);
                     IF (len < totalChar) { 
                        logger.error ( "packet is received ERROR:" + new new String (body, "UTF-. 8") + "length:" + len); 
                        logger.info ( "ERROR packet is received : "+ ByteUtil.bytesToBit (body)); 
                        logger.info (ByteUtil.parseByte2HexStr (body)); 
                        IF ( null !! = Socket && socket.isClosed ()) { 
                            the Socket.close (); 
                        } 
                        Continue ; 
                    } the else { 
                        logger.info ( "packet is received:"+ newString (body, "UTF-. 8" )); 
                        logger.info (ByteUtil.bytesToBit (body)); 
                        logger.info (ByteUtil.parseByte2HexStr (body)); 
                    } 
                    
                    T409_car_collects dbcollect = new new T409_car_collects (); // hardware data storage in this object 
                    
                    byte [] = idBytes new new  byte [. 17 ]; 
                    System.arraycopy (body, 0, idBytes, 0,. 17 ); 
                    String ID = new new String (idBytes); 
                    dbcollect.setTerminalid (ID); 

// the 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();
        }
        
        
    }
@Override
    public void stop() {
        enable = false;
        if (null != serverSocket && !serverSocket.isClosed()) {
            try {
                serverSocket.close();
            } catch (IOException e) {
                logger.error("close serverSocket err.", e);
            }
        }
    }
    
    
    class Handler implements Runnable {
        private T409_car_collects collect;
        
        private Socket socket;
        
        Handler(T409_car_collects collect, Socket socket) {
            this.collect = collect;
            this.socket = socket;
        }
        
        @Override
        public void run() {
            // 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 = new T410_car_collects_log();
            BeanUtils.copyProperties(collect,collect_log);
            BeanUtils.copyProperties(collect_log,collect);
            t410_car_collects_logMapper.insertSelective(collect_log);
            List<T409_car_collects> ext = carownerService.getcar_runningdatabyterminalid(collect.getTerminalid());                
            if(ext ==null ){
                t409_car_collectsMapper.insertSelective(collect);
            }else{
                collect.setId(ext.get(0).getId());
                Date now = new Date(); 
                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);
                }
            }
        }
        
    }

 

Guess you like

Origin www.cnblogs.com/doufuyu/p/11070069.html