首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jssc没有接收到信号

jssc没有接收到信号
EN

Stack Overflow用户
提问于 2013-07-30 13:59:31
回答 2查看 3.8K关注 0票数 0

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

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

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

OS: WIN7_x64

我做错什么了?

请随便问一下是否遗漏了一些信息或某事物。还不清楚。

先向您致以亲切的问候和感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-31 15:22:33

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

票数 1
EN

Stack Overflow用户

发布于 2013-07-30 19:40:01

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

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

代码语言:javascript
复制
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类型的对象分配给串行端口对象,如下所示:

代码语言:javascript
复制
serialPort.addEventListener(new SerialPortReader());

另一种方法是使用循环,其中包含read方法,如下所示:

代码语言:javascript
复制
try {
    while (true) {
        if (serialPort.getInputBufferBytesCount() > 0) {
            System.out.print(serialPort.readString());
        }
        Thread.sleep(100);
    }
} catch (Exception ex) {
    System.out.prinln(ex);
}

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17949137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档