我必须在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
我做错了什么?
随时询问是否遗漏了某些信息或某事。目前还不清楚。
亲切的问候和提前谢谢。
答案 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
。