- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一段代码,可以通过连接到 PC 上 USB 连接器之一的虚拟串行端口向继电器板发送命令,并读取响应。
语法:
发送:
command\r
回复:
command\r
answer\r
>
在我的开发电脑上,它运行良好。 (Lubuntu 13.10)但在目标 PC(Lubuntu 12.04 LTS)上它只读取我发送的命令。例如:
发送:
gpio read 0\r
正确的响应(在我的开发环境上它的工作原理如下):
gpio read 0\r
1\r
>
它在其他机器上也能很好地工作。但是,不幸的是,在我想要开发的 PC 上,响应如下:
gpio read 0
这里流结束而没有真正的响应。
我的代码是:
public static String command(String command) throws Exception {
byte[] buffer = new byte[1024];
int len = 0;
out.flush();
try{
out.write(command.getBytes());
out.write('\r');
out.flush();
int data;
Thread.sleep(100);
while (in.available() > 0)
{
data = in.read();
if ( (char) data == '>') {
break;
}
buffer[len++] = (byte) data;
}
} catch (IOException ex){
}
return new String(buffer);
}
一些可能有用的参数:
开发机器:
kernel: 3.11.0-12 generic
java version: 1.7.0_51 OpenJDK IcedTea 2.4.4, 7u51-2.4.4-0ubuntu0.13.10.1
目标机器:
kernel 3.7.1-030701-generic
java version: 1.7.0_55 OpenJDK IcedTea 2.4.7, 7u55-2.4.7-1ubuntu1~0.12.04.2
在这两种情况下我都使用 RXTX-2.2-pre2
有什么想法吗?感谢您的提前!
最佳答案
这可能是一个时间问题。您有一个 Thread.sleep(100),但这不是很安全,除非您知道完整响应始终会在 100 毫秒内可用。有可能in.available()在您预期之前返回 0,因为完整的响应尚未发送,即使您已经阅读了它的第一部分。
替代方案可能是这样的:
do
{
data = in.read();
if ( (char) data == '>') {
break;
}
buffer[len++] = (byte) data;
}
while(data != -1);
如果没有数据或者您的响应永远不会返回“>”,这将无限期地阻塞。根据您的设备协议(protocol),这可能是安全地确保您已阅读所有内容的唯一方法。但理想情况下,您可以准确计算出您期望接收多少字节,然后执行 readFully 或类似操作。
请注意,可以配置 Rxtx,以便读取不会阻塞,在这种情况下,您必须以不同的方式进行编码。 (某些旧版本的 rxtx 有一个错误,无论配置如何,读取都不会阻塞。)
您应该在 catch 处理程序中输出异常堆栈跟踪(如果尚未输出),以防万一发生 IO 错误。
此外,根据您的代码,您的输出永远不会在输出中包含“>”字符。只是澄清一下,因为您在问题中声明了这一点。
关于java - RXTX 读取响应太短 - 无法接收客户端回复的所有字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23761079/
RXTX网站http://rxtx.qbang.org/wiki/index.php/Download已经下降了一段时间。您知道下载适用于 windows、linux 和 raspberry pi 的
我正在尝试使用 RXTX API 通过 Java Marine API 从 NMEA 0183 GPS 获取 GPS 数据。 运行 Java Marine 提供的 SerialPortExample.
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
我使用的是 Windows 7 64 位。我编写了一个小应用程序,它使用 RXTX 通过串行端口进行通信。我在 Windows 64 位上使用了 rxtxSerial.dll,它在 Eclispe 和
让我直接进入问题。 比方说,我有一个 Arduino Uno (COM4) 和 Arduino Mega (COM5),它们都通过串行端口与我的操作系统通信。我怎样才能检测到 COM4 真的是一个 A
我正在尝试编写的 Java 串行读取器遇到问题,问题似乎在于 inputstream 方法...... 我的 readSerial() 方法出现错误,它给出错误“无法从类型 InputStream 对
我有一个内置于 netbeans 的 java 程序,它使用 Here 中的 RXTX 。到目前为止,它在 Windows 和 Linux 上都运行得很好。 我的问题:是否可以将所需的 RXTX 文件
我从 RXTX 网站编辑了一个已经制作好的示例。我也是 Java 和串行通信编程的新手。 该应用程序完美运行了一次。它从 PIC 读取缓冲区并发送我输入的数字。 LED 亮起,PIC 发回相同的缓冲区
我正在尝试制作一个 Java 接口(interface)来向 GPRS 模块发送一些 AT 命令。 我已经有了一个关于Processing的工作界面,但我迁移到纯Java,因为我发现制作图形界面更容易
我正在尝试使用 RXTX java 库通过 GUI 中的单击监听器发送字符串,但我无法编辑 RXTX 的代码来发送字符串,它只响应来自控制台的输入,那么我如何编辑代码以不仅发送从控制台输入的数据? 我
我正在使用 RXTX 在 JAVA 和微 Controller 之间进行通信。 这是打开连接、发送和接收数据的JAVA代码 package app; import gnu.io.CommPort; i
我已经使用 RXTX 大约一年了,没有遇到太多问题。我刚刚启动了一个新程序来与新硬件进行交互,所以我重新使用了我在其他项目中使用过的 connect() 方法,但是我遇到了一个以前从未见过的奇怪问题。
在试图找出 this problem 时(感谢任何帮助),我在运行 RXTX 的同时使用 PortMon 监控其 Activity 并注意到 RXTX 不断检查数据是否可用,即使 Java 客户端仅通
我找到了一个通过串行端口在 Java 中与 Arduino 进行通信的代码,并想尝试让它工作以扩展它以实现项目创意,但我不断收到此错误 Stable Library =================
在将 RXTX 用于许多不同的项目之后,我遇到了许多恼人的差异和问题,这些问题只能归结为库中的错误 - 死锁、竞争危险和 RXTX 库深处的监控线程被保持打开状态以防止程序关闭(即使我使用的所有端口都
我正在尝试运行此函数,并得到带有文本的配置 gnu.io.rxtx.properties 窗口:尚未检测到 gnu.io.rxtx.properties。 没有一致的方法来检测此操作系统上的端口。在进
这是我的代码,我正在使用 rxtx 。 public void Send(byte[] bytDatos) throws IOException { this.out.write(by
我目前正在开发一个项目,该项目需要与连接在通讯端口上的设备进行通信。我下面有一个函数,它搜索串行端口,将它们添加到 HashMap ,然后返回 HashMap 。我注意到一个问题,每当我尝试从 Has
我正在尝试编写一个程序,让 Arduino Uno 通过串行端口与 Java 程序通信。我按照此处的说明进行操作 ( http://playground.arduino.cc/Interfacing/
我在 Windows 上使用 RXTX 2.1-7,但遇到一个问题。每当我使用 RXTX 库运行程序时,都会打印以下通用版本控制信息: 稳定库 ============================
我是一名优秀的程序员,十分优秀!