【问题标题】:jssc doesn't receive a signaljssc 没有收到信号
【发布时间】:2013-07-30 13:59:31
【问题描述】:

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

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

如果我使用微软的超级终端软件,我可以看到数据是以双向方式发送和接收的。 另一方面,如果我试图与两个 Eclipse 项目进行通信,而一个发送信号 (writeBytes()) 而另一个接收信号 (readBytes()),则该信号将无法到达 readBytes 方法. 我只从read 方法获得null 作为返回值。 对于信号本身,我尝试过从 byte[] 到 string 和 w/o \r\n。

操作系统:WIN7_x64

我做错了什么?

随时询问是否缺少某些信息或某事。不清楚。

提前致以诚挚的问候和感谢。

【问题讨论】:

    标签: java event-handling serial-port


    【解决方案1】:

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

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

    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。

    【讨论】:

    • 您好,我之前已经使用过您的第一个+第二个代码块的代码。当我调试它时,serialEvent 没有被触发,所以我进一步往下看,发现readBytes 返回值是null。这是我在原帖中描述的。删除侦听器后,我使用了您的第三个代码 sn-p 的修改版本。
    【解决方案2】:

    通过卸载虚拟 COM 端口的仿真软件并使用管理员权限正确重新安装它解决了主要问题和 bcdedit.exe -set TESTSIGNING ON.

    【讨论】:

      猜你喜欢
      • 2016-04-20
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2022-01-22
      • 2017-07-25
      • 2022-06-13
      • 2013-02-10
      • 1970-01-01
      相关资源
      最近更新 更多