最近のプロジェクトは、ニーズが(最近忙しく、再び一つ一つを説明するための時間)を、端末のハードウェアストアによって送信されたデータを受信し、コードを解析するために舞台裏会っ以下のように要約されています:
@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(本体)); IF(NULL!=ソケット&& 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)。 } } } }