简体   繁体   English

RXTX 如何从 com 端口读取

[英]RXTX how to reading from com port

Hi i have somthing like this嗨,我有这样的东西

package compot;

import java.util.Enumeration;
import gnu.io.*;


public class core {

    private static SerialPort p;

    /**
     * @param args
     */
    public static void main(String[] args) 
    {
        Enumeration ports = CommPortIdentifier.getPortIdentifiers();
        System.out.println("start");
        while(ports.hasMoreElements())
        {
            CommPortIdentifier port = (CommPortIdentifier) ports.nextElement();
            System.out.print(port.getName() + " -> " + port.getCurrentOwner() + " -> ");
            switch(port.getPortType())
            {
                case CommPortIdentifier.PORT_PARALLEL:
                    System.out.println("parell");
                break;
                case CommPortIdentifier.PORT_SERIAL:
                    //System.out.println("serial");
                try {
                    p = (SerialPort) port.open("core", 1000);
                    int baudRate = 57600; // 57600bps
                    p.setSerialPortParams(
                            baudRate,
                            SerialPort.DATABITS_8,
                            SerialPort.STOPBITS_1,
                            SerialPort.PARITY_NONE);
                } catch (PortInUseException e) {
                    System.out.println(e.getMessage());
                } catch (UnsupportedCommOperationException e) {
                    System.out.println(e.getMessage());
                }
                break;
            }
        }
        System.out.println("stop");
    }
}

But I dont know how to read from port??但我不知道如何从端口读取?? I have read this tutorial but i dont know what "Demo application" they mean??我已经阅读了本教程,但我不知道它们的“演示应用程序”是什么意思??

EDIT编辑

OutputStream outStream = p.getOutputStream();
                    InputStream inStream = p.getInputStream();

                    BufferedReader in = new BufferedReader( new InputStreamReader(inStream));
                    String inputLine;

                    while ((inputLine = in.readLine()) != null) 
                        System.out.println(inputLine);
                    in.close();

I have add this code but i recive我已经添加了这段代码,但我收到了

Stable Library ========================================= Native lib Version = RXTX-2.1-7 Java lib Version = RXTX-2.1-7 start /dev/ttyUSB3 -> null -> Underlying input stream returned zero bytes stop稳定库 =========================================== 原生库版本 = RXTX-2.1 -7 Java lib Version = RXTX-2.1-7 start /dev/ttyUSB3 -> null -> 底层输入 stream 返回零字节停止

Is this your code?这是你的代码吗? What are you actually trying to do there?你到底想在那里做什么? :p :p

In order to read from a SerialPort, you need to declare this port:为了从 SerialPort 读取,您需要声明此端口:

CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier("/dev/tty/USB0"); //on unix based system

Then open a connection on this port:然后在这个端口上打开一个连接:

SerialPort serialPort = (SerialPort) portIdentifier.open("NameOfConnection-whatever", 0);

Next step would be to set the params of this port (if needed):下一步是设置此端口的参数(如果需要):

serialPort.setSerialPortParams(38400, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

This is my config - your's might differ accordingly:)这是我的配置 - 你的可能会有所不同:)

Now you're ready to read some data on this port, To get the data: you need to get the serialPorts inputstream and read from that:现在您已准备好在此端口上读取一些数据,要获取数据:您需要获取 serialPorts 输入流并从中读取:

InputStream inputStream = serialPort.getInputStream();
while (active) {
        try {
            byte[] buffer = new byte[22];
            while ((buffer[0] = (byte) inputStream.read()) != 'R') {
            }
            int i = 1;
            while (i < 22) {
                if (!active) {
                    break;
                }
                buffer[i++] = (byte) inputStream.read();
            }
            //do with the buffer whatever you want!
        } catch (IOException ex) {
            logger.error(ex.getMessage(), ex);
        }
}

What I'm actually doing here is reading from the inputstream using it's read() method.我实际上在这里做的是使用它的read()方法从输入流中读取。 This will block until data is available or return -1 if end of stream is reached.这将阻塞直到数据可用,如果到达 stream 的末尾,则返回 -1。 In this example I wait until I get an 'R' character and then read the next 22 bytes into a buffer.在这个例子中,我等到我得到一个“R”字符,然后将接下来的 22 个字节读入缓冲区。 And that's how you read data.这就是您读取数据的方式。

  1. Get the serialPorts inputstream获取 serialPorts 输入流
  2. use.read() method使用.read() 方法
  3. have that all inside a loop and exit loop when canceled (in my case, the active can be set to false by another method and thus end the reading process.将其全部包含在循环中并在取消时退出循环(在我的情况下,可以通过另一种方法将active设置为 false 从而结束读取过程。

hope this helps希望这可以帮助

Try using尝试使用

if (socketReader.ready()) {
}

so that the socket responds only when there is something to read in the Buffer Stream so the Exception never Occurs.这样套接字仅在缓冲区 Stream 中有要读取的内容时才响应,因此永远不会发生异常。

Something like this in your try block:在你的 try 块中是这样的:

OutputStream outStream = p.getOutputStream();
InputStream inStream = p.getInputStream();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM