我必须在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
我做错什么了?
请随便问一下是否遗漏了一些信息或某事物。还不清楚。
先向您致以亲切的问候和感谢。
发布于 2013-07-31 15:22:33
通过卸载虚拟com端口仿真软件,并通过管理员权限和bcdedit.exe -set TESTSIGNING ON正确地重新安装它,解决了主要问题。
发布于 2013-07-30 19:40:01
当您调用没有参数的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。
https://stackoverflow.com/questions/17949137
复制相似问题