我有一些问题,我猜它的代码。
该应用程序是用来“平”一些定制的网络设备,以检查他们是否还活着。 它坪它们每20秒有一个特殊的UDP数据包,并预计响应。 如果他们不能回答连续3坪的应用程序发送警告信息给工作人员。
在应用程序运行24/7和次随机数天(2-5居多)的应用程序无法接收UDP数据包为10分钟的确切时间,在这之后一切都恢复了正常。 在这10分钟仅得1设备似乎正在回复,其他人似乎死了。 我已经能够从日志来推断。
我使用Wireshark的嗅探数据包,我验证过ping包会都出来,在,所以网络的一部分似乎是工作好了,一路操作系统。 计算机运行WinXPpro依照有的已经没有任何配置的防火墙。 我在不同计算机上的这个问题,不同的窗口和安装不同的网络。
我真的很茫然,什么可能是这里的问题。
我附加了该做的所有网络代码的相关部分。 这是从应用程序的其余部分一个单独的线程运行。
我感谢你提前为任何见解可能会提供。
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)