我一直在尝试创建一个 Java 程序,该程序最终将用于使用 hostapd 和 dnsmasq 包控制 Linux 中的 Wi-Fi 接入点(它们分别是接入点和 DNS/DHCP 服务器)。
至关重要的是,我可以在 hostapd 执行时读取它的 StdOut,因为它返回的数据必须经过解析才能向用户显示重要数据。
为此,我使用以下代码:
// Start access point
MainFrame.instance.setStatus("Starting access point...");
List<String> cmd = new ArrayList<String>();
// sudo hostapd /etc/hostapd.conf
cmd.add("/usr/bin/sudo");
cmd.add("/usr/sbin/hostapd");
cmd.add("/etc/hostapd.conf");
ProcessBuilder ps = new ProcessBuilder();
ps.command(cmd);
ps.redirectErrorStream(true);
Process p = ps.start();
//Process p = Runtime.getRuntime().exec("sudo hostapd /etc/hostapd.conf");
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
MainFrame.instance.setStatus("Running");
MainFrame.instance.setRunning(true);
while ((line = input.readLine()) != null) {
System.out.println(line);
output += (line + '\n');
if (line.contains("AP-STA-CONNECTED")) {
addClientToList(line);
} else if (line.contains("AP-STA-DISCONNECTED")) {
removeClientFromList(line);
}
}
input.close();
但是,在 hostapd 终止之前不会返回任何数据。sudo hostapd /etc/hostapd.conf
如果用户在终端中执行相同的命令 ( ),则数据显示正确。为什么我无法从 InputStream 中获取数据?
我对Java相当陌生,所以这里可能有一些我错过的非常明显的错误,但如果是这样,请告诉我:)