通过树莓派切换套接字状态的Java函数

标签 java linux sockets raspberry-pi

我在 java 中有一个函数,它正在我的树莓派上执行,并且应该发送一个信号来将目标套接字状态切换为开/关。

这就是我当前的功能:

    public static void rcswitch(int housecode,int unitcode, int onoff) throws InterruptedException, IOException {
    String housestring = Integer.toString(housecode);
    String unitstring = Integer.toString(unitcode);
    String onoffstring = Integer.toString(onoff);

    ProcessBuilder builder = new ProcessBuilder("/bin/bash", "-c", "sudo /home/pi/rcswitch-pi/send", housestring, unitstring, onoffstring);
    Process proc = builder.start();

    BufferedReader reader = 
            new BufferedReader(new InputStreamReader(proc.getInputStream()));
          String line = "";
          while((line = reader.readLine()) != null) {
               System.out.print(line + "\n");
          }
}

但是,终端似乎没有收到命令,因为它没有输出任何内容。它应该显示类似“收到命令”的内容,然后执行它。当我通常在终端中执行/send 命令时,它工作得很好。在 Eclipse 中它工作正常并抛出预期的错误。

感谢您的回答:)

最佳答案

很可能是执行命令时发生错误。请记住Process#getInputStream()不包括进程的标准错误流。您应该使用 Process#getErrorStream() 。像这样的东西:

BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
String line = null;
while((line = reader.readLine()) != null) {
    System.out.print(line + "\n");
}

关于通过树莓派切换套接字状态的Java函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24250952/

相关文章:

java - 使用 while 和 for 循环时如何访问和操作字符串数组中的各个值

java - 重构以下代码以利用非常小的空间,即使对于大数据也是如此

c++ - 在 Linux 中以 C/C++ 编程方式更改文件的创建时间戳

C# <-> Java 套接字通信

c - C 中的写入和读取,套接字 AF_UNIX

node.js - Node.js 和 React 之间的 Websocket 握手错误

Java SystemClipboard 包含额外的字节

java - Java 中四舍五入到偶数个小数点

linux - 使用命令行 Linux 远程服务器运行并启动 denodo 平台,无需 GUI

c - getaddrinfo 中返回的 sin_port 错误