下面是我自己实现的串口接收的类,串口发送比较简单,就直接发送就可以了。下面的这个类可以直接使用。

  1. package com.boomdts.weather_monitor.util;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import java.io.*;
  5. import java.util.*;
  6. import javax.comm.*;
  7. import com.boomdts.weather_monitor.biz.RecvCommand;
  8. import com.boomdts.weather_monitor.util.SysLog;
  9. /*
  10. 串口通信类
  11. */
  12. public class SerialComm {
  13. private int ibaudRate;
  14. private String scomPort;
  15. private CommPortIdentifier portId = null;
  16. //从外设获取数据
  17. private InputStream inStream ;
  18. //发送命令到外设
  19. private OutputStream outStream ;
  20. private SerialPort serialPort;
  21. public SerialComm(int ibaudRate, String scomPort) {
  22. this.ibaudRate = ibaudRate;
  23. this.scomPort = scomPort;
  24. try {
  25. Enumeration portList = CommPortIdentifier.getPortIdentifiers();
  26. while (portList.hasMoreElements())
  27. {
  28. portId = (CommPortIdentifier) portList.nextElement();
  29. //如果端口类型是串口则判断名称
  30. if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
  31. //如果是COM1端口则退出循环
  32. System.out.println("portId = " + portId.getName());
  33. if(portId.getName().equals(scomPort)){
  34. break;
  35. }else{
  36. portId=null;
  37. }
  38. }
  39. }
  40. //打开串口的超时时间为1000ms
  41. SerialPort serialPort = (SerialPort)portId.open("Serial_Communication", 1000);
  42. //设置串口速率为38400,数据位8位,停止位1们,奇偶校验无
  43. serialPort.setSerialPortParams(ibaudRate,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
  44. //建立好监听类以后要在port上添加。
  45. //其中port是上文打开的串口端口,commListener是上文的监听器实例
  46. serialPort.addEventListener(new CommListener(serialPort));
  47. //设置监听模式为当有数据到达时唤醒监听线程。
  48. serialPort.notifyOnDataAvailable(true);
  49. // Set notifyOnBreakInterrup to allow event driven break handling.
  50. serialPort.notifyOnBreakInterrupt(true);
  51. // Set receive timeout to allow breaking out of polling loop during input handling.
  52. serialPort.enableReceiveTimeout(30);
  53. //发送命令到外设
  54. OutputStream outStream = new BufferedOutputStream(serialPort.getOutputStream());
  55. //new ReceiveThread(inStream).start();
  56. //new SendThread(outStream).start();
  57. } catch (IOException e) {
  58. e.printStackTrace();
  59. } catch (UnsupportedCommOperationException e) {
  60. e.printStackTrace();
  61. } catch (PortInUseException e) {
  62. e.printStackTrace();
  63. } catch (TooManyListenersException e) {
  64. e.printStackTrace();
  65. }
  66. SysLog.logger.info("串口打开成功!");
  67. }
  68. }
  69. //建立监听类,继承自javax.comm.SerialPortEventListener;
  70. class CommListener implements SerialPortEventListener {
  71. private StringBuffer linkWgt ;//存放获取的数据
  72. private String sCommand ;//上传的命令
  73. private SerialPort serialPort ;
  74. private InputStream inStream ;
  75. private RecvCommand recvCommand;
  76. public CommListener(SerialPort serialPort){
  77. recvCommand = new RecvCommand();
  78. linkWgt = new StringBuffer();
  79. sCommand = new String();
  80. this.serialPort = serialPort;
  81. try {
  82. //从外设获取数据
  83. this.inStream = new BufferedInputStream(serialPort.getInputStream());
  84. } catch (IOException e) {
  85. e.printStackTrace();
  86. }
  87. }
  88. //实现监听方法
  89. public void serialEvent(SerialPortEvent e){
  90. int newData = 0;
  91. byte bRead[] = {0};
  92. String sSubStr = "";
  93. // Determine type of event.
  94. switch (e.getEventType()) {
  95. // Read data until -1 is returned. If \r is received substitute
  96. // \n for correct newline handling.
  97. case SerialPortEvent.DATA_AVAILABLE:
  98. while (newData != -1) {
  99. try {
  100. //inStream = serialPort.getInputStream();
  101. newData = inStream.read();
  102. if (newData == -1) {
  103. break;
  104. }
  105. if ('\r' == (char)newData) {
  106. } else {
  107. //把0~255的int转换成两位的16进制字符串
  108. sSubStr = Integer.toHexString((newData & 0x000000FF) | 0xFFFFFF00).substring(6);
  109. //System.out.println(sSubStr);
  110. linkWgt.append(sSubStr);
  111. }
  112. } catch (IOException ex) {
  113. System.err.println(ex);
  114. return;
  115. }
  116. }
  117. try{
  118. System.out.println("linkWgt 提取命令前----start-----" + linkWgt.toString() + "----end-----");
  119. while(linkWgt.indexOf("a55a") != -1) {
  120. linkWgt.delete(0,linkWgt.indexOf("a55a"));
  121. if(linkWgt.indexOf("9191910000") == -1)
  122. {
  123. System.out.println("该命令内容错误!" + linkWgt);
  124. } else {
  125. sCommand =linkWgt.substring(0, linkWgt.indexOf("9191910000"));
  126. linkWgt.delete(0,linkWgt.indexOf("9191910000"));
  127. System.out.println("sCommand ----start-----" + sCommand + "----end-----");
  128. recvCommand.analyze(sCommand);
  129. }
  130. }
  131. }catch(Exception ew){
  132. ew.printStackTrace();
  133. }finally{
  134. }
  135. break;
  136. // If break event append BREAK RECEIVED message.
  137. case SerialPortEvent.BI:
  138. System.out.println("\n--- BREAK RECEIVED ---\n");
  139. }
  140. }
  141. }

java 串口通信 代码的更多相关文章

  1. java串口通信丢包

    java串口通信丢包问题 前段时间公司要求做一个java应用和pos串口通信的工具,调试好了好久每次都是只能接收到一包数据后续的数据都丢失了. 经过修改读写的流的缓存大小亲测都正常代码如下: seri ...

  2. Java串口通信具体解释

    序言 说到开源,恐怕非常少有人不挑大指称赞.学生通过开源码学到了知识,程序猿通过开源类库获得了别人的成功经验及可以按时完毕手头的project,商家通过开源软件赚到了钱……,总之是皆大欢喜.然而开源软 ...

  3. Java串口通信详细解释

    前言 说到开源.恐怕非常少有人不挑大指称赞. 学生通过开源码学到了知识,程序猿通过开源类库获得了别人的成功经验及可以按时完毕手头的project,商家通过开源软件赚到了钱……,总之是皆大欢喜. 然而开 ...

  4. Java串口通信--------基于RXTX (附带资源地址)

    最近帮老师做了一个小项目,一个牧场公司想用传感器收集一些环境信息,记录到数据库里去,然后加以分析查看.这里面和传感器通信用到了串口通信,我也是接触了一下,把用到的东西分享出来. 准备工作: RXTX: ...

  5. Java串口通信 RXTX 解决过程

    背景介绍: 由于第一次用Java与硬件通信,网上查了许多资料,在这进行整理,便于以后学习.本人串口测试是USB串口设备连接电脑,在设备管理器中找到端口名称(也可以通过一些虚拟串口工具模拟). 下面主要 ...

  6. Java 串口通信

    在Windows系统下,用Java开发串口通信相关的程序时,需要用到几个文件. (1)win32com.dll 要放在jdk\jre\bin目录下. (2)comm.jar 和javax.comm.p ...

  7. java 串口通信实现流程

    1.下载64位rxtx for java 链接:http://fizzed.com/oss/rxtx-for-java 2.下载下来的包解压后按照说明放到JAVA_HOME即JAVA的安装路径下面去 ...

  8. Java 串口通信 Ubuntu

    说一下我的操作过程吧 在Windows上先用阿猫串口网络调试助手,进行调试: 在网上找Java代码,我选择的是RXTXcomm,网上代码很多,基本都一样. 在Windows电脑上把rxtx压缩包中的r ...

  9. 【Java】基于RXTX的Java串口通信

    本篇内容参考转载自https://blog.csdn.net/kong_gu_you_lan/article/details/80589859 环境搭建 下载地址:http://fizzed.com/ ...

随机推荐

  1. 高性能CSS(二)

    避免CSS表达式 CSS表达式是动态设置CSS属性的强大(但危险)方法.Internet Explorer从第5个版本开始支持CSS表达式.下面的例子中,使用CSS表达式可以实现隔一个小时切换一次背景 ...

  2. 百练_2945 拦截导弹(DP)

    描述 某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹来袭 ...

  3. 模板:strncpy函数

    参考链接:http://baike.baidu.com/view/1207711.htm strncpy 是 C语言的函数之一,来自 C语言标准库,定义于 string.h,char *strncpy ...

  4. jquery实现抽奖转盘

    用jquery通过配置参数实现抽奖转盘 1.html代码 <!DOCTYPE html> <html lang="zh-CN"> <head> ...

  5. 全部省市县数据库(MySQL脚本) (转)

    /*MySQL - 5.5.47 *************//*!40101 SET NAMES utf8 */; create table `base_area` (    `codeid` me ...

  6. 1_jz2440在linux下烧写裸机程序

    常用的烧写方法有: 1.使用并口工具烧写:接线(参考百问网JZ2440V2开发板使用手册),使用oflash烧写(速度比较慢),可烧写.bin文件,从新上电观察效果.可烧写u_boot. 2.使用op ...

  7. xml直接读取节点

    <root> <books> <book id="one"></book> <book id="two"& ...

  8. 离线文档(DocSet)下载地址汇总

    我分享的百度网盘地址,官网下载慢:http://pan.baidu.com/s/1uOBYQ 名称 下载地址 更新时间 IOS 9.2 031-43202-A.dmg 20151209 OS X 10 ...

  9. php判断服务器是否支持Gzip压缩功能

    Gzip可以压缩网页大小从而达到加速打开网页的速度,目前主流的浏览器几乎都支持这个功能,但开启Gzip是需要服务器支持的,在这里我们简单的使用php来判断服务器是否支持Gzip功能. 新建一个php类 ...

  10. ubuntu server版连接vpn服务器

    命令行的方法: 1.要下载pptp的客户端    sudo apt-get install pptp-linux 2.创建连接     sudo pptpsetup –create vpn001 –s ...