Win7環境下Java串口資料讀寫(RXTX)

來源:互聯網
上載者:User

轉載自:

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
 }

}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.