我有什么问题,我猜是代码。
该应用程序用于“ping”一些定制的网络设备以检查它们是否还活着。它每 20 秒使用一个特殊的 UDP 数据包对它们进行 ping 操作,并期望得到响应。如果他们未能连续 3 次回复 ping,则应用程序会向工作人员发送警告消息。
该应用程序每天 24/7 运行,并且每天有随机次数(主要是 2-5 次),应用程序在 10 分钟的确切时间内无法接收 UDP 数据包,之后一切恢复正常。在这 10 分钟内,似乎只有一台设备在回复,其他设备似乎已死机。我已经能够从日志中推断出。
我已经使用wireshark 来嗅探数据包,并且我已经验证了ping 数据包既进出又进,所以网络部分似乎工作正常,一直到操作系统。这些计算机正在运行 WinXPPro,有些计算机没有配置防火墙。我在不同的计算机、不同的 Windows 安装和不同的网络上遇到了这个问题。
我真的不知道这里可能是什么问题。
我附上了执行所有网络的代码的相关部分。这是在与应用程序的其余部分分开的线程中运行的。
我提前感谢您提供的任何见解。
def monitor(self):
checkTimer = time()
while self.running:
read, write, error = select.select([self.commSocket],[self.commSocket],[],0)
if self.commSocket in read:
try:
data, addr = self.commSocket.recvfrom(1024)
self.processInput(data, addr)
except:
pass
if time() - checkTimer > 20: # every 20 seconds
checkTimer = time()
if self.commSocket in write:
for rtc in self.rtcList:
try:
addr = (rtc, 7) # port 7 is the echo port
self.commSocket.sendto('ping',addr)
if not self.rtcCheckins[rtc][0]: # if last check was a failure
self.rtcCheckins[rtc][1] += 1 # incr failure count
self.rtcCheckins[rtc][0] = False # setting last check to failure
except:
pass
for rtc in self.rtcList:
if self.rtcCheckins[rtc][1] > 2: # didn't answer for a whole minute
self.rtcCheckins[rtc][1] = 0
self.sendError(rtc)