gpt4 book ai didi

java - jssc没有收到信号

转载 作者:行者123 更新时间:2023-12-02 06:51:45 27 4
gpt4 key购买 nike

我必须在java和Windows平台上处理客户端和服务器之间的串行通信。我正在使用 JSSC lib(尝试过 0.9 和 2.6),但我遇到了无法接收数据的问题。我正在使用虚拟桥接软件来模拟 nullmodem 设备连接 ( http://www.hhdsoftware.com/free-virtual-serial-ports )。

端口本身使用默认参数(9600, 8, 1, 0)打开。

如果我使用微软的 super 终端软件,我可以看到数据以双向方式发送和接收。另一方面,如果我尝试与两个 Eclipse 项目进行通信,其中一个发送信号 (writeBytes()),另一个接收信号 (readBytes()) ,信号不会到达 readBytes 方法。我只从 read 方法获取 null 作为返回值。对于信号本身,我已经尝试从 byte[]string 并使用和不使用 \r\n

操作系统:WIN7_x64

我做错了什么?

如果某些信息丢失或某事,请随时询问。不清楚。

提前致以亲切的问候和感谢。

最佳答案

当您调用不带参数的readBytes()方法时,jSSC尝试从串行端口读取所有可用数据,如果串行端口输入缓冲区为空,方法立即返回null值.

为了正确处理传入数据,您应该使用SerialPortEventListener接口(interface),代码示例:

class SerialPortReader implements SerialPortEventListener {

public void serialEvent(SerialPortEvent event) {
if (event.isRXCHAR() && event.getEventValue() > 0) {//If data is available
int bytesCount = event.getEventValue();
System.out.print(serialPort.readString(bytesCount));
}
}
}

您应该将 SerialPortReader 类型的对象分配给串行端口对象,如下所示:

serialPort.addEventListener(new SerialPortReader());

另一种方法是使用内部带有 read 方法的循环,如下所示:

try {
while (true) {
if (serialPort.getInputBufferBytesCount() > 0) {
System.out.print(serialPort.readString());
}
Thread.sleep(100);
}
} catch (Exception ex) {
System.out.prinln(ex);
}

但我强烈建议您使用 SerialPortEventListener,因为它在独立线程中运行并使用串行端口特定的 API。

关于java - jssc没有收到信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17949137/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com