[英]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.
这就是您读取数据的方式。
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.