Java后台创建Socket服务接收硬件终端发送的数据
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java后台创建Socket服务接收硬件终端发送的数据,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3043字,纯文字阅读大概需要5分钟。
内容图文
最近项目中有遇到后台接收硬件终端发送的数据并解析存储的需求,代码总结如下(有时间再来一一讲解,最近比较忙):
@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 = newbyte[totalChar]; int len = reader.read(body, 0, 84); if (len < totalChar) { 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 = newbyte[17]; System.arraycopy(body, 0, idBytes, 0, 17); String id = new String(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(); } } @Override publicvoid 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 publicvoid 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); } } } }
原文:https://www.cnblogs.com/doufuyu/p/11070069.html
内容总结
以上是互联网集市为您收集整理的Java后台创建Socket服务接收硬件终端发送的数据全部内容,希望文章能够帮你解决Java后台创建Socket服务接收硬件终端发送的数据所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。