Javaのソケットの背景には、送信した端末のハードウェアを受信データサービスを作成します

最近のプロジェクトは、ニーズが(最近忙しく、再び一つ一つを説明するための時間)を、端末のハードウェアストアによって送信されたデータを受信し、コードを解析するために舞台裏会っ以下のように要約されています:

@Override
     公共 ボイド開始(){ 
        ExecutorServiceのプール = Executors.newCachedThreadPool()。
        試す{
             場合{(有効化)
                 を返します
            } 
            イネーブル = 
            ServerSocketを = 新しいServerSocketを(ポート); 
            ソケットソケット = nullを
            BufferedInputStreamをリーダ = NULL ; 
            なBufferedOutputStreamライター = nullを同時に(イネーブル){
                 試みる{ 
                    ソケット)(= serverSocket.acceptします。// 阻塞方法 
                    socket.setSoTimeout(100000 ); 
                    
                    // 開始バイト例 
                    リーダー= 新しいにBufferedInputStream(socket.getInputStream())。
                    ライター = 新しいなBufferedOutputStream(socket.getOutputStream());
                    int型 totalChar = 84 ;
                    バイト []ボディ= 新しい バイト[totalChar]。
                    int型のlen = reader.read(ボディ、0、84);
                     IF(LEN < totalChar){ 
                        logger.error( "パケットが受信されたエラー:" + 新しい新しい文字列(ボディ、 "UTF-8")+ "長さ" + LEN); 
                        logger.info(「ERRORパケットが受信されます:「+ ByteUtil.bytesToBit(本体)); 
                        logger.info(ByteUtil.parseByte2HexStr(本体)); 
                        IFNULL!=ソケット&& socket.isClosed()){ 
                            Socket.close(); 
                        } 
                        続行; 
                    } { 
                        logger.infoは(「パケットが受信されています。」+ 新しいですストリング(ボディ、 "UTF-8" )); 
                        logger.info(ByteUtil.bytesToBit(本体)); 
                        logger.info(ByteUtil.parseByte2HexStr(本体)); 
                    } 
                    
                    T409_car_collects dbcollect = 新しい新しい T409_car_collects(); // ハードウェア・データ・ストレージこのオブジェクト内の
                    
                    バイト [] = idBytes 新しい新しい バイト [17 ]; 
                    System.arraycopyの(本体、 0、idBytes、0 ,. 17 ); 
                    文字列IDが = 新しい新しい文字列(idBytes); 
                    dbcollect.setTerminalid(ID); 

// TODO 

} キャッチ(例外e){ 
                    logger.error( "ソケットエラーを解析します。" 、E)。
                    もしNULL!=ソケット&& socket.isClosed()){ 
                        socket.close()。
                    }                     
                }                             
            } 
        } キャッチ(IOExceptionを電子){ 
            logger.error( "" 、E)。
        } 最後に{ 
            pool.shutdown()。
        } 
        
        
    } 
@Override 
    公共 ボイド停止(){ 
        イネーブル= ;
        もしヌル!= ServerSocketを&& serverSocket.isClosed()){
             しようと{ 
                )(serverSocket.closeを。
            } キャッチ(IOExceptionを電子){ 
                logger.error( "近くのServerSocket ERR。" 、E)。
            } 
        } 
    } 
    
    
    クラスハンドラが実装されたRunnable {
         プライベートT409_car_collects収集します。
        
        プライベートソケットソケット。
        
        ハンドラ(T409_car_collectsは、ソケットのソケットを収集){ 
            この .collect =収集し;
            この .socket = ソケット。
        } 
        
        @Override 
        公共 ボイドラン(){
             // TODO 
            するSystem.out.println( "SERVハンドラ:" + collect.getRemark()); 

            logger.error(MessageFormat.format( "Terminalid {0}は存在していない" 、collect.getTerminalid()))。

            T410_car_collects_log collect_log = 新しいT410_car_collects_log(); 
            BeanUtils.copyProperties(collect_logを収集します)。
            BeanUtils.copyProperties(collect_log収集)。
            t410_car_collects_logMapper.insertSelective(collect_log)。
            一覧 <T409_car_collects> EXT =carownerService.getcar_runningdatabyterminalid(collect.getTerminalid())。                
            もし(EXT == NULL ){ 
                t409_car_collectsMapper.insertSelective(収集)
            } { 
                collect.setId(ext.get( 0 ).getId())。
                日付今 = 新しい日付(); 
                collect.setUpdatetime(今)。
                t409_car_collectsMapper.updateByPrimaryKeySelective(収集)
            } 
            
            試みる{ 
                のPrintWriter PW = 新しい(PrintWriterを新しいですOutputStreamWriter(socket.getOutputStream()、 "UTF-8")、真の); 
                pw.println( "クライアントに戻します。" ); 
                pw.flush(); 
            } キャッチ(例外e){ 
                logger.error( "ソケットクライアントERRを送り返す。" 、E)。
            } 最後に{
                 試みる{ 
                    socket.closeを(); 
                } キャッチ(IOExceptionを電子){ 
                    logger.error( "近いソケットERR。" 、E)。
                } 
            } 
        } 
        
    }

 

おすすめ

転載: www.cnblogs.com/doufuyu/p/11070069.html