如何使用 Qt 在另一台设备上启动和停止外部程序?

How to start and stop an external program in another device using Qt?

我正在开发一个固件更新程序,它应该从网络服务器下载数据并将其上传到嵌入式 Linux 设备。

我希望一个程序(客户端)在建立它们之间的连接并开始发送数据之前启动另一个程序(服务器)。在同一环境中做到这一点很容易:只需调用 QProcessstartDetached(),但我想远程执行此操作:我想在桌面计算机中启动客户端,并通过 ETH/TCP 在一个已知的 IP 地址中,单击一个按钮,该按钮将要求设备启动服务器。当服务器完成启动并开始等待连接时,桌面应用程序将打开套接字连接并开始发送数据。发送完所有数据后,应发送另一个命令要求服务器关闭,关闭连接并完成文件传输操作。

我的问题是:当应用程序位于不同的机器(在嵌入式 Linux 设备中,而来电者在 PC 中)?请注意,解决方案必须不依赖于某些额外软件(例如 Tcp 服务器)来不断地在设备上 运行 - 这正是我要避免的。

这与 Qt 没有任何关系,因为它没有为此目的提供任何东西。 从这一点开始至少有两条路径:

  • 从您的应用程序使用 SSH 启动远程计算机中的任何进程:ssh user@remote-machine "any command here"。这可以使用 QProcess 调用; 或者
  • 写另一个软件来监听套接字命令和start/stop任何你想要的进程,然后在远程机器上一直运行得到它。然后,只需更改您的客户端软件即可发送相关命令

当心允许机器执行来自外部源的任意命令可能引起的任何安全问题。