9

所以,我有一个 Python 应用程序,但我想知道计算机(正在运行应用程序)是否从另一台远程计算机上打开。

有没有办法做到这一点?我正在考虑使用 UDP 数据包,使用计数器发送某种保持活动状态。前任。客户端每 5 分钟向服务器发送一个 UDP 'keep-alive' 数据包。提前致谢!

4

5 回答 5

22

If your goal actually is to test whether a specific service is running on the remote machine, you could test if the network port that this service should run on is reachable. Example:

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
    s.connect(('hostname', 22))
    print "Port 22 reachable"
except socket.error as e:
    print "Error on connect: %s" % e
s.close()

If the application you want to test for is designed to run on e.g. port 1337, then check this port.

于 2013-07-16T17:44:36.510 回答
4

首先,您应该知道没有标准的方法来确定计算机是否打开,这与语言/平台无关。计算机可以伪造您尝试检查的任何状态。

但是检查计算机是否开启的常用方法是发送Ping(ICMP 回显请求)。这个答案显示了如何使用 Python 发送 Ping。

于 2013-07-16T17:16:56.997 回答
0

将 Web 服务器添加到您的应用程序。

http://www.tornadoweb.org/en/stable/ http://webpy.org/

于 2013-07-16T17:18:00.270 回答
0

您正在寻找的似乎是一个网络/主机监控工具,或者只是一个简单的心跳监控器。根据具体情况(例如要监控的主机数量),诸如Nagios、 Munin 或Heartbeat之类的东西可能会有所帮助。

于 2013-07-16T17:13:49.353 回答
0

是的,这就是要走的路。有点像发送心跳ping。由于它是 UDP 并且它只是一个标头消息,因此您可以将频率降低到 10 秒。这不应该导致任何可测量的系统性能下降,因为它只是我们谈论的 2 个系统。

我觉得在这里,与 TCP 相比,UDP 可能更好。它的轻量级,不消耗大量系统资源,理论上速度更快。缺点是可能会丢失数据包。您可以通过输入一些逻辑来规避这种情况,例如当没有连续收到 10 个数据包(间隔 10 秒)时,然后声明另一个系统无法访问。

于 2013-07-16T17:14:32.867 回答