当前位置: 首页 > 面试题库 >

RXTX串行连接-阻止read()的问题

朱啸
2023-03-14
问题内容

我正在尝试使用RXTX库来阻止Windows(XP和7)上的串行通信。我已经在两端测试了与Hyperterminal的连接,并且可以正常工作。

我使用以下代码设置了连接:(为清楚起见,省略了异常处理和防御检查)

private InputStream inStream;
private OutputStream outStream;
private BufferedReader inReader;
private PrintWriter outWriter;
private SerialPort serialPort;
private final String serialPortName;

public StreamComSerial(String serialPortName) {
this.serialPortName = serialPortName;
CommPortIdentifier portIdentifier;
portIdentifier = CommPortIdentifier.getPortIdentifier(serialPortName);
CommPort commPort = null;
commPort = portIdentifier.open(this.getClass().getName(),500);
serialPort = (SerialPort) commPort;    serialPort.setSerialPortParams(4800,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
inStream = serialPort.getInputStream();
outStream = serialPort.getOutputStream();
inReader = new BufferedReader(new InputStreamReader(inStream, Settings.getCharset()));
outWriter = new PrintWriter(new OutputStreamWriter(outStream, Settings.getCharset()));

当我使用

outWriter.println("test message");
flush();

该消息在另一端收到很好,但是打电话

inReader.readLine()

直接返回“ java.io.IOException:基础输入流返回零字节”。

然后,我决定尝试实现自己的阻塞读取逻辑,并写成这样:

public String readLine() throws IOException {        
    String line = new String();
    byte[] nextByte = {-1};
    while (true) {
        nextByte[0] = (byte)inStream.read();
        logger.debug("int read: " + nextByte[0]);
        if (nextByte[0] == (byte)-1) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            continue;
        }
        logger.debug("byte read: " + nextByte[0]);

        line = line + new String(nextByte);
        if (nextByte[0] == (byte)13) {  // 13 is carriage return in ASCII
            return line;
        }
    }
}

但是这段代码陷入了无限循环,并且“ nextByte [0] =(byte)inStream.read();”
无论通过串行连接发送什么,都分配-1。另外,另一端的结结非常严重,只能让我每1-3秒发送一个字符。如果尝试在短时间内发送许多字符,则会挂起很长时间。

任何帮助非常感谢。

*编辑-使用inStream.read(nextByte)代替“ nextByte [0] =(byte)inStream.read();” 不管我通过串行连接发送给它什么,它都不会写入nextByte变量。

  • edit2-由于我的代码可完美地与我从朋友那里获得的SUN javax.comm库和win32com.dll一起使用,因此我不再尝试使其与RXTX一起使用。我对畅通通信不感兴趣,这似乎是其他人可以使RXTX正常工作的唯一方法。

问题答案:

使用RXTX-2.2pre2,以前的版本有一个错误,阻止I / O正常工作。

并且不要忘记将端口设置为阻止模式:

serialPort.disableReceiveTimeout();
serialPort.enableReceiveThreshold(1);


 类似资料:
  • 问题内容: 查询1打开15个连接,执行后将关闭它们。但是将永远不会执行,因为它包含等待自由连接的内容。 如何解决这个问题呢? 问题答案: 你有一个僵局。在最坏的情况下,您有15个goroutine持有15个数据库连接,而所有这15个goroutine都需要一个新的连接才能继续。但是要获得新的连接,就必须前进并释放一个连接:死锁。 链接的维基百科文章详细介绍了防止死锁的方法。例如,代码执行仅在拥有需

  • 问题内容: 我已经使用RXTX大约一年了,没有太多问题。我刚启动一个新程序来与新硬件交互,所以我重用了我在其他项目中使用过的connect()方法,但是我遇到了一个从未见过的怪异问题。 问题 该设备运行良好,因为当我与超级终端连接时,我发送东西并收到期望的东西,而串行端口监视器(SPM)反映了这一点。 但是,当我运行简单的HyperTerminal- clone来诊断主应用程序遇到的问题时,根据S

  • 我已经为一个服务实现了socket.io,然后删除了它。但是,我仍然有客户机向endpoint/socket.io发出初始连接请求,而endpoint/socket.io已经不存在了。使用各种http状态代码进行响应似乎并不重要。 是否有方法阻止客户端尝试连接?我每分钟收到几千个请求。

  • 问题内容: 如您所见,我在数据库连接上遇到问题。它给了我这个错误: …由于许多连接错误而被阻止 我搜索了一些答案,但无法解决问题。 我不知道我是否提供了您需要的所有信息,所以如果您需要其他信息,请告诉我。我有来自不同计算机的数据库连接,并且创建了一个用户来访问该数据库,但该用户位于主机行中,因此我想使用IP地址更改它以解决安全问题,因此出现了此错误,因此我卡住。 问题答案: MySQL会阻止连接时

  • 我正试图从vue.js端访问laravel服务器。但它表明 CORS策略阻止从来源“http://localhost:8000/api/registerdoctor”访问位于“http://localhost:8080”的XMLHttpRequest:请求的资源上没有“Access-Control-Allow-Origin”标头。 怎么办?

  • 我想连接到一个URL,这是阻止,使用python请求。 我使用了许多不同的代理服务器没有一个为我工作。https://free-proxy-list.net/ 回溯(最近一次调用last):文件“t.py”,第14行,在a=requests.get('https://my-url“,proxies=proxyDict)文件“/home/user/Documents/backend1/venv-li