本文实例为大家分享了Java实现串口通信的具体代码,供大家参考,具体内容如下
1.介绍
使用Java实现的串口通信程序,支持十六进制数据的发送与接收。
源码:SerialPortDemo
效果图如下:
2.RXTXcomm
内含32位与64位版本
使用方法:
拷贝 RXTXcomm.jar 到 JAVA_HOMEjrelibext目录中;
拷贝 rxtxSerial.dll 到 JAVA_HOMEjrebin目录中;
拷贝 rxtxParallel.dll 到 JAVA_HOMEjrebin目录中;
JAVA_HOME为jdk安装路径
3.串口通信管理
SerialPortManager实现了对串口通信的管理,包括查找可用端口、打开关闭串口、发送接收数据。
package com.yang.serialport.manage;
import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.NoSuchPortException;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import gnu.io.SerialPortEventListener;
import gnu.io.UnsupportedCommOperationException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.TooManyListenersException;
import com.yang.serialport.exception.NoSuchPort;
import com.yang.serialport.exception.NotASerialPort;
import com.yang.serialport.exception.PortInUse;
import com.yang.serialport.exception.ReadDataFromSerialPortFailure;
import com.yang.serialport.exception.SendDataToSerialPortFailure;
import com.yang.serialport.exception.SerialPortInputStreamCloseFailure;
import com.yang.serialport.exception.SerialPortOutputStreamCloseFailure;
import com.yang.serialport.exception.SerialPortParameterFailure;
import com.yang.serialport.exception.TooManyListeners;
/**
* 串口管理
*
* @author yangle
*/
public class SerialPortManager {
/**
* 查找所有可用端口
*
* @return 可用端口名称列表
*/
@SuppressWarnings(“unchecked”)
public static final ArrayList findPort() {
// 获得当前所有可用串口
Enumeration portList = CommPortIdentifier
.getPortIdentifiers();
ArrayList portNameList = new ArrayList();
// 将可用串口名添加到List并返回该List
while (portList.hasMoreElements()) {
String portName = portList.nextElement().getName();
portNameList.add(portName);
}
return portNameList;
}
/**
* 打开串口
*
* @param portName
* 端口名称
* @param baudrate
* 波特率
* @return 串口对象
* @throws SerialPortParameterFailure
* 设置串口参数失败
* @throws NotASerialPort
* 端口指向设备不是串口类型
* @throws NoSuchPort
* 没有该端口对应的串口设备
* @throws PortInUse
* 端口已被占用
*/
public static final SerialPort openPort(String portName, int baudrate)
throws SerialPortParameterFailure, NotASerialPort, NoSuchPort,
PortInUse {
try {
// 通过端口名识别端口
CommPortIdentifier portIdentifier = CommPortIdentifier
.getPortIdentifier(portName);
// 打开端口,设置端口名与timeout(打开操作的超时时间)
CommPort commPort = portIdentifier.open(portName, 2000);
// 判断是不是串口
if (commPort instanceof SerialPort) {