串口连接好了,剩下的就是写程序了
   
    1.准备
   
    下载Communication包
   
    下载地址如下:http://mdubuc.freeshell.org/Jolt/javacomm20-win32.zip.
   
    2.配置
   
    解压缩javacomm20-win32.zip

 
   

把win32com.dll拷贝到{JAVA_HOME}\jre\bin
     
     把comm.jar拷贝到{JAVA_HOME}\jre\lib\ext
     
     把javax.comm.properties拷贝到{JAVA_HOME}\jre\lib
     
     再环境变量的CLASSPATH中添加一项:{JAVA_HOME}\jre\lib\ext\comm.jar;
     
     我的CLASSPATH添加后为:
     
     .;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\jre\lib\ext\comm.jar;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\jtds.jar;%Tomcat_Home%\common\lib\servlet-api.jar;
         3.列举出本机所有可用串口
     
     void listPortChoices() {
     
     CommPortIdentifier portId;
     
     Enumeration en = CommPortIdentifier.getPortIdentifiers();
     
     // iterate through the ports.
     
     while (en.hasMoreElements()) {
     
     portId = (CommPortIdentifier) en.nextElement();
     
     if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
     
     System.out.println(portId.getName());
     
     }
     
     }
     
     portChoice.select(parameters.getPortName());
     
     }
     
     以上代码可以列举出当前系统所有可用的串口名称,我的机器上输出的结果是COM3和COM4.


   
    4.下载串口调试程序
   
    下载地址:http://www.onlinedown.net/soft/54540.htm    
    安装后,它会自动辨认计算机的端口,如果电脑没有串口,会提示:"串口不存在,或被占用"
   
    5.程序
   
 

package cn.edu.lzjtu.comm;
     
     import java.io.IOException;
     
     import java.io.InputStream;
     
     import java.util.Iterator;
     
     import java.util.List;
     
     import java.util.TooManyListenersException;
     
     import javax.comm.CommPortIdentifier;
     
     import javax.comm.PortInUseException;
     
     import javax.comm.SerialPort;
     
     import javax.comm.SerialPortEvent;
     
     import javax.comm.SerialPortEventListener;
     
     import javax.comm.UnsupportedCommOperationException;
     
     public class Readstr {
     
     static String str = "000000";
     
     public void init()
     
     {
     
     try{
     
     CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("COM3");
     
     // 直接取得COM3端口
     
     System.out.println(portId.getName()+":开启");
     
     @SuppressWarnings("unused")
     
     Read reader = new Read(portId);
     
     }catch(Exception ex){
     
     ex.printStackTrace();
     
     }
     
     }
     
     class Read implements Runnable, SerialPortEventListener {
     
     InputStream inputStream;
     
     SerialPort serialPort;
     
     Thread readThread;
     
     public Read(CommPortIdentifier portId) throws InterruptedException {
     
     try {
     
     serialPort = (SerialPort) portId.open("MyReader", 2000);
     
     //portId.open("串口所有者名称", 超时等待时间);
     
     } catch (PortInUseException e) {
     
     //如果端口被占用就抛出这个异常
     
     e.printStackTrace();
     
     }
     
     try {
     
     inputStream = serialPort.getInputStream();
     
     //从COM3获取数据
     
     } catch (IOException e) {}
     
     try {
     
     serialPort.addEventListener(this);
         //添加监听器
     
     } catch (TooManyListenersException e) {}
     
     serialPort.notifyOnDataAvailable(true);
     
     /* 侦听到串口有数据,触发串口事件*/
     
     try {
     
     serialPort.setSerialPortParams(9600,//波特率
     
     SerialPort.DATABITS_8,//数据位数
     
     SerialPort.STOPBITS_1,//停止位
     
     SerialPort.PARITY_NONE);//校验
     
     } catch (UnsupportedCommOperationException e) {}
     
     readThread = new Thread(this);
     
     readThread.start();
     
     //启动线程
     
     }
     
     public  void run() {
     
     try {
     
     Thread.sleep(30000);
     
     serialPort.close();
     
     System.out.println("COM3:关闭");
     
     //设定30秒后端口关闭,程序随之结束
     
     } catch (InterruptedException e) {}
     
     }
     
     /**
     
     *  BI -通讯中断。
     
     CD -载波检测。
     
     CTS -清除发送。
     
     DATA_AVAILABLE -有数据到达。
     
     DSR -数据设备准备好。
     
     FE -帧错误。
     
     OE -溢位错误。
     
     OUTPUT_BUFFER_EMPTY -输出缓冲区已清空。
     
     PE -奇偶校验错。
     
     RI - 振铃指示。
     
     一般最常用的就是DATA_AVAILABLE--串口有数据到达事件。
     
     */
     
     public void serialEvent(SerialPortEvent event) {
     
     switch(event.getEventType()) {
     
     case SerialPortEvent.BI:
     
     case SerialPortEvent.OE:
     
     case SerialPortEvent.FE:
     
     case SerialPortEvent.PE:
     
     case SerialPortEvent.CD:
     
     case SerialPortEvent.CTS:
     
     case SerialPortEvent.DSR:
     
     case SerialPortEvent.RI:
     
     case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
     
     break;
     
     case SerialPortEvent.DATA_AVAILABLE:
     
     byte[] readBuffer = new byte[20];
     
     try {
     
     while (inputStream.available() > 0) {
     
     int numBytes = inputStream.read(readBuffer);
     
     //System.out.println("numBytes"+numBytes);
     
     }
     
     str = new String(readBuffer)。trim();
     
     System.out.println(new String(readBuffer)。trim());
         //输出读入的字符
     
     } catch (IOException e) {}
     
     break;
     
     }
     
     }
     
     }
     
     public static void main(String [] args)
     
     {
     
     Readstr reader = new Readstr();
     
     reader.init();
     
     }
     
     }
     
     //此程序只用于监听COM3端口,当程序执行时开启COM3端口,等待30秒后,端口COM3关闭,程序随之关闭
     
     //Read 为内部类,这样可以共用读取出来的字符串信息
     
     //在Readstr 中定义一个静态变量static String str = "000000";
     
     //然后在读出数据后str = new String(readBuffer)。trim();
     
     //这样可以在一个事件触发后,将str中的值赋给相应的值(比如说,让这个值显示在输入框中)


   
    6.执行程序
   
    执行上边的程序,打开超级超级串口调试器,选择除COM3以外的端口,波特率改为9600,因为上面的程序选择的是COM3端口,波特率为9600,也可以将上边程序端口改的别的,反正就是:这个串口调试程序占用一个端口,上边的执行程序再占用一个端口,两个端口不能为同一个,不然会出异常。
   
    如图所示:点击手动发送,后台是不是输出数据了?呵呵
   
    好了做到这里,我们可以在程序中读取出服务端的串口信息了。
   
    但由于项目是B/S的,最终目的是读取出来每个登录客户端的串口信息