jssc没有收到信号

时间:2013-07-30 13:59:31

标签: java event-handling serial-port

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

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

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

操作系统:WIN7_x64

我做错了什么?

随时询问是否遗漏了某些信息或某事。目前还不清楚。

亲切的问候和提前谢谢。

2 个答案:

答案 0 :(得分:2)

当您调用不带参数的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。

答案 1 :(得分:0)

通过卸载虚拟计算机的仿真软件并使用admin-rights正确地重新安装它来解决主要问题 bcdedit.exe -set TESTSIGNING ON