Win7环境下Java串口数据读写(RXTX)(转载)
2013-01-04 23:13
369 查看
转载自:
http://blog.sina.com.cn/s/blog_5ceb51480100rdgw.html
最近在实际项目中,需要Java语言来实现对串口数据的读写操作。本来可以用javax.comm这个包的,但是经过几次测试,始终不能读出PC上的串口;于是我换了rxtx包在Myeclipse8.6下进行测试,测试结果表明可以获取到PC的可用端口。javax.comm在windows下的开发维护已经停止了,rxtx的旧版本支持在javax.comm-win32-2.0基础上的扩展,rxtx新版本支持对javax.comm的覆盖式支持,也就是说原来用javax.comm的把所有import
javax.comm.*改成import gnu.io.*就可以正常使用了,其他只须相关的dll文件,不用properties文件,支持的端口类型也明显多了很多。
RXTX包下载地址:http://rxtx.qbang.org/pub/rxtx/rxtx-2.1-7-bins-r2.zip
下载解压后,其配置环境如下:
把下载包中rxtx-2.1-7-bins-r2\Windows\i368-mingw32\rxtxSerial.dll 放到你%java_home%\jre\bin下面(%java_home%\jre\bin\rxtxSerial.dll)和C:\Windows\System32下面(C:\Windows\System32\rxtxSerial.dll);
把下载包中rxtx-2.1-7-bins-r2\RXTXcomm.jar放到%java_home%\jre\lib\ext下面(%java_home%\jre\lib\ext\RXTXcomm.jar)。
注:%java_home%为你安装JDK的路径,如:C:\Program Files\Java\jdk1.6.0_10
下面是在Myeclipse中引用RXTXcomm.jar,选择工程Build Path,选择Configure Build Path,选择Libraries,点击Add Exteral JARS按钮,在弹出的对话框中找到RXTXcomm.jar,然后选中,点击打开,再点击OK即可。
好了,下面就可以进行程序的编写了,首先看看能都获取到你PC上的串口,程序如下:
package test;
import java.util.Enumeration;
import gnu.io.*;
public class TestSerial {
@SuppressWarnings("unchecked")
static Enumeration portList;
static CommPortIdentifier portId;
public static void main(String[] args) {
try {
portList = CommPortIdentifier.getPortIdentifiers(); //得到当前连接上的端口
while (portList.hasMoreElements()) {
portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {//判断如果端口类型是串口
//if (portId.getName().equals("COM3")) { //判断如果COM3端口已经启动就连接
System.out.println(portId.getName());
}
}
//}
} catch (Exception e) {
e.printStackTrace();
}
}
}
测试结果:
Stable Library
=========================================
Native lib Version = RXTX-2.1-7
Java lib Version = RXTX-2.1-7
COM1
COM3
下面程序是作为服务端,当收到WIFI发送的数据,然后对串口进行写数据操作的程序:
package test;
import java.io.*;
import java.net.*;
import gnu.io.*;
import java.util.*;
public class Tcpserver implements Runnable {
public static final String ServerIP="192.168.1.108";
public static final int ServerPort=7788;
static CommPortIdentifier portId; //串口通信管理类
@SuppressWarnings("unchecked")
static Enumeration portList; //已经连接上的端口的枚举
public static SerialPort serialPort; //串口的引用
本文参考:http://dev.firnow.com/course/3_program/java/javajs/20100112/189411.html
public static OutputStream out;
public void run(){
try{
System.out.println("Connection...");
ServerSocket serverSocket = new ServerSocket(ServerPort);
while(true){
Socket client=serverSocket.accept();
System.out.println("Receiveing...");
try{
BufferedReader bf=new BufferedReader(new InputStreamReader(client.getInputStream()));
String str=bf.readLine();
if(str.equals("0")){
out.write(48);
out.flush();
}else if(str.equals("1")){
out.write(49);
out.flush();
}
System.out.println("Received:'"+str+"'");
}catch(Exception e)
{
e.toString();
}finally{
out.close();
client.close();
System.out.println("done");
}
}
}catch(Exception e)
{
e.toString();
}
}
public static void main(String[] args) {
Thread ServerThread=new Thread( new Tcpserver());
ServerThread.start();
try {
portList = CommPortIdentifier.getPortIdentifiers(); //得到当前连接上的端口
while (portList.hasMoreElements()) {
portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {//判断如果端口类型是串口
if (portId.getName().equals("COM1")) { //判断如果COM3端口已经启动就连接
serialPort=(SerialPort)portId.open("COM1",2000);
serialPort.setSerialPortParams(38400, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
out=serialPort.getOutputStream();
System.out.println(portId.getName());
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
// TODO Auto-generated method stub
}
}
http://blog.sina.com.cn/s/blog_5ceb51480100rdgw.html
最近在实际项目中,需要Java语言来实现对串口数据的读写操作。本来可以用javax.comm这个包的,但是经过几次测试,始终不能读出PC上的串口;于是我换了rxtx包在Myeclipse8.6下进行测试,测试结果表明可以获取到PC的可用端口。javax.comm在windows下的开发维护已经停止了,rxtx的旧版本支持在javax.comm-win32-2.0基础上的扩展,rxtx新版本支持对javax.comm的覆盖式支持,也就是说原来用javax.comm的把所有import
javax.comm.*改成import gnu.io.*就可以正常使用了,其他只须相关的dll文件,不用properties文件,支持的端口类型也明显多了很多。
RXTX包下载地址:http://rxtx.qbang.org/pub/rxtx/rxtx-2.1-7-bins-r2.zip
下载解压后,其配置环境如下:
把下载包中rxtx-2.1-7-bins-r2\Windows\i368-mingw32\rxtxSerial.dll 放到你%java_home%\jre\bin下面(%java_home%\jre\bin\rxtxSerial.dll)和C:\Windows\System32下面(C:\Windows\System32\rxtxSerial.dll);
把下载包中rxtx-2.1-7-bins-r2\RXTXcomm.jar放到%java_home%\jre\lib\ext下面(%java_home%\jre\lib\ext\RXTXcomm.jar)。
注:%java_home%为你安装JDK的路径,如:C:\Program Files\Java\jdk1.6.0_10
下面是在Myeclipse中引用RXTXcomm.jar,选择工程Build Path,选择Configure Build Path,选择Libraries,点击Add Exteral JARS按钮,在弹出的对话框中找到RXTXcomm.jar,然后选中,点击打开,再点击OK即可。
好了,下面就可以进行程序的编写了,首先看看能都获取到你PC上的串口,程序如下:
package test;
import java.util.Enumeration;
import gnu.io.*;
public class TestSerial {
@SuppressWarnings("unchecked")
static Enumeration portList;
static CommPortIdentifier portId;
public static void main(String[] args) {
try {
portList = CommPortIdentifier.getPortIdentifiers(); //得到当前连接上的端口
while (portList.hasMoreElements()) {
portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {//判断如果端口类型是串口
//if (portId.getName().equals("COM3")) { //判断如果COM3端口已经启动就连接
System.out.println(portId.getName());
}
}
//}
} catch (Exception e) {
e.printStackTrace();
}
}
}
测试结果:
Stable Library
=========================================
Native lib Version = RXTX-2.1-7
Java lib Version = RXTX-2.1-7
COM1
COM3
下面程序是作为服务端,当收到WIFI发送的数据,然后对串口进行写数据操作的程序:
package test;
import java.io.*;
import java.net.*;
import gnu.io.*;
import java.util.*;
public class Tcpserver implements Runnable {
public static final String ServerIP="192.168.1.108";
public static final int ServerPort=7788;
static CommPortIdentifier portId; //串口通信管理类
@SuppressWarnings("unchecked")
static Enumeration portList; //已经连接上的端口的枚举
public static SerialPort serialPort; //串口的引用
本文参考:http://dev.firnow.com/course/3_program/java/javajs/20100112/189411.html
public static OutputStream out;
public void run(){
try{
System.out.println("Connection...");
ServerSocket serverSocket = new ServerSocket(ServerPort);
while(true){
Socket client=serverSocket.accept();
System.out.println("Receiveing...");
try{
BufferedReader bf=new BufferedReader(new InputStreamReader(client.getInputStream()));
String str=bf.readLine();
if(str.equals("0")){
out.write(48);
out.flush();
}else if(str.equals("1")){
out.write(49);
out.flush();
}
System.out.println("Received:'"+str+"'");
}catch(Exception e)
{
e.toString();
}finally{
out.close();
client.close();
System.out.println("done");
}
}
}catch(Exception e)
{
e.toString();
}
}
public static void main(String[] args) {
Thread ServerThread=new Thread( new Tcpserver());
ServerThread.start();
try {
portList = CommPortIdentifier.getPortIdentifiers(); //得到当前连接上的端口
while (portList.hasMoreElements()) {
portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {//判断如果端口类型是串口
if (portId.getName().equals("COM1")) { //判断如果COM3端口已经启动就连接
serialPort=(SerialPort)portId.open("COM1",2000);
serialPort.setSerialPortParams(38400, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
out=serialPort.getOutputStream();
System.out.println(portId.getName());
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
// TODO Auto-generated method stub
}
}
相关文章推荐
- Java串口编程学习1-环境配置(64位Win7)
- Java串口编程学习1-环境配置(64位Win7)
- java串口读取数据(转载)
- Java实现串口数据读写
- win7,Xp搭建Java环境
- java基础---->java虚拟机运行环境数据区域说明
- Java:自动设置环境变量(转载)
- 在win7下配置java编译环境变量
- win7下Java环境变量的配置
- xml数据介绍与用java读写xml文件
- java 串口 读写
- JAVA串口读写小结
- Win7下配置java环境变量
- Windows下的java串口开发环境配置
- 串口读写,select 检测有数据时就接收,防止阻塞问题
- java环境变量配置-win7(最终版)
- [转]win7中java环境变量配置
- [转载] 一网打尽13款开源Java大数据工具,从理论到实践的剖析
- Java 如何配置环境变量 win7配置1.6Jdk的环境变量【新手教程】