RXTX串行连接-阻止read()的问题

我正在尝试使用RXTX库来阻止Windows(XP和7)上的串行通信。我已经在两端测试了与Hyperterminal的连接,并且可以正常工作。

我使用以下代码设置了连接:(为清楚起见,省略了异常处理和防御检查)

private InputStream inStream;

private OutputStream outStream;

private BufferedReader inReader;

private PrintWriter outWriter;

private SerialPort serialPort;

private final String serialPortName;

public StreamComSerial(String serialPortName) {

this.serialPortName = serialPortName;

CommPortIdentifier portIdentifier;

portIdentifier = CommPortIdentifier.getPortIdentifier(serialPortName);

CommPort commPort = null;

commPort = portIdentifier.open(this.getClass().getName(),500);

serialPort = (SerialPort) commPort; serialPort.setSerialPortParams(4800,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);

inStream = serialPort.getInputStream();

outStream = serialPort.getOutputStream();

inReader = new BufferedReader(new InputStreamReader(inStream, Settings.getCharset()));

outWriter = new PrintWriter(new OutputStreamWriter(outStream, Settings.getCharset()));

当我使用

outWriter.println("test message");

flush();

该消息在另一端收到很好,但是打电话

inReader.readLine()

直接返回“ java.io.IOException:基础输入流返回零字节”。

然后,我决定尝试实现自己的阻塞读取逻辑,并写成这样:

public String readLine() throws IOException {        

String line = new String();

byte[] nextByte = {-1};

while (true) {

nextByte[0] = (byte)inStream.read();

logger.debug("int read: " + nextByte[0]);

if (nextByte[0] == (byte)-1) {

try {

Thread.sleep(100);

} catch (InterruptedException e) {

e.printStackTrace();

}

continue;

}

logger.debug("byte read: " + nextByte[0]);

line = line + new String(nextByte);

if (nextByte[0] == (byte)13) { // 13 is carriage return in ASCII

return line;

}

}

}

但是这段代码陷入了无限循环,并且“ nextByte [0] =(byte)inStream.read();”

无论通过串行连接发送什么,都分配-1。另外,另一端的结结非常严重,只能让我每1-3秒发送一个字符。如果尝试在短时间内发送许多字符,则会挂起很长时间。

任何帮助非常感谢。

*编辑-使用inStream.read(nextByte)代替“ nextByte [0] =(byte)inStream.read();” 不管我通过串行连接发送给它什么,它都不会写入nextByte变量。

  • edit2-由于我的代码可完美地与我从朋友那里获得的SUN javax.comm库和win32com.dll一起使用,因此我不再尝试使其与RXTX一起使用。我对畅通通信不感兴趣,这似乎是其他人可以使RXTX正常工作的唯一方法。

回答:

使用RXTX-2.2pre2,以前的版本有一个错误,阻止I / O正常工作。

并且不要忘记将端口设置为阻止模式:

serialPort.disableReceiveTimeout();

serialPort.enableReceiveThreshold(1);

以上是 RXTX串行连接-阻止read()的问题 的全部内容, 来源链接: utcz.com/qa/398348.html

回到顶部