2 sinat 28519535 sinat_28519535 于 2015.05.27 10:47 提问

Java通过得到的Socket流向串口发送数据

我是一个菜鸟,最近学习Java ,写了个向串口发送数据的代码,有点问题,希望各位大神给指点指点

 package server;

import gnu.io.CommPortIdentifier;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import gnu.io.UnsupportedCommOperationException;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.TooManyListenersException;

import javax.lang.model.element.Parameterizable;

import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream;

public class server extends Thread implements SerialPortEventListener  {

    static Enumeration portList;    //已经连接上的端口枚举
    static CommPortIdentifier portId;  //串口通信管理类
    static SerialPort serialPort;        //串口的引用
    static OutputStream outputStream;
    static InputStream ins;
    static int count = 0;

    @SuppressWarnings("null")
    public static void main(String[] args) throws IOException {

        final ServerSocket s = new ServerSocket(12345);
        InetAddress addr = InetAddress.getLocalHost();
        System.out.println("Ip地址为:"+addr.getHostAddress());

        SerialPort port = PortsManager.getSerilPort("COM3", 2400);
        if(null==port) {
            System.out.println("串口为空!");
            return;
        }
        try {
            port.setSerialPortParams(2400,SerialPort.DATABITS_8,
                    SerialPort.STOPBITS_1,SerialPort.PARITY_SPACE);
        } catch (UnsupportedCommOperationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        OutputStream outs = port.getOutputStream();
        Socket ss = s.accept();
        InputStream ins = ss.getInputStream();
        byte[] b = new byte[8];
        int len = -1;
        while((len = ins.read(b))!= -1){
            count++;
            System.out.println("Socket 连接成功!");
            System.out.println(b.toString());
            if(count>2){  
                outs.write(b);  
            }  

        }

     }

     public void run(){
         Thread th=new Thread();
         th.start();
         try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
     }

    //@Override
    public void serialEvent(SerialPortEvent arg0) {
         //TODO Auto-generated method stub
        try {
            serialPort.addEventListener(this);//注册一个SerialPortEventListener事件来监听串口事件
            serialPort.notifyOnDataAvailable(true);//设置监听模式为当有数据到达时唤醒监听线程。
        } catch (TooManyListenersException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}



1个回答

u014214535
u014214535   2015.05.27 13:01

问题出在哪里都不说,怎么回答?

baidu_37006097
baidu_37006097 我想做一个应用,就是用java做串口通信转网络通信
7 个月之前 回复
sinat_28519535
sinat_28519535 第一次发帖,不太熟悉流程。我要连续发送数据流,没有关线程。可是我的代码只能发送一次数据就自己关闭了。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片