2017-09-06 4 views
0

Ce code est capable de détecter si Internet est déconnecté ou connecté, et fonctionne principalement comme je l'ai testé. Le problème est parfois dit Internet déconnecté et juste après cela dit Internet connecté. Cela s'est produit plusieurs fois pendant que je naviguais sur le Web, que je regardais des vidéos ou quoi que ce soit, le fait que je sache qu'Internet fonctionne.Vérificateur réseau donnant des faux négatifs python

Je sais que le code est un peu en désordre. Qu'est-ce qui cause ces fausses déconnexions?

import win32com.client as w 
import socket 
s = w.Dispatch("SAPI.SpVoice") 
try: 
    socket.setdefaulttimeout(5) 
    socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect(("8.8.8.8", 53)) 
    a = True 
except Exception: 
    a = False 
    pass 

while a == True: 
    while True: 
     try: 
      socket.setdefaulttimeout(5) 
      socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect(("8.8.8.8", 53)) 
      s.Speak("Internet connected") 
      break 
     except Exception: 
      continue 
    while True: 
     try: 
      socket.setdefaulttimeout(5) 
      socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect(("8.8.8.8", 53)) 
      continue 
     except Exception: 
      s.Speak("Internet disconnected") 
      break 

while a == False: 
    while True: 
     try: 
      socket.setdefaulttimeout(5) 
      socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect(("8.8.8.8", 53)) 
      continue 
     except Exception: 
      s.Speak("Internet disconnected") 
      break 
    while True: 
     try: 
      socket.setdefaulttimeout(5) 
      socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect(("8.8.8.8", 53)) 
      s.Speak("Internet connected") 
     except Exception: 
      continue 

Répondre

1

Vous vous connectez au serveur DNS de google à un rythme d'environ 100 fois par seconde, au moins sur ma machine. Je ne serais pas surpris s'ils refusent occasionnellement vos connexions, mais je ne suis pas prêt à tester cette théorie. Votre machine est peut-être à court de ports à ce rythme? Je n'ai aucune idée de la façon dont la pile TCP de Windows gérerait quelque chose comme ça. Essayez d'ajouter un sommeil dans toutes vos boucles pour vous assurer que vous ne les martelez pas - tester votre connexion toutes les deux secondes devrait être parfait. De plus, votre question initiale est "Pourquoi le socket ne parvient-il pas à se connecter?" Eh bien, attraper l'exception, et imprimer pour que vous le sachiez (ou le dire à haute voix :))

+0

Merci. Je ne pensais pas à la charge que j'allais mettre sur google. Pour ce qui est d'attraper l'exception, je ne pense pas qu'elle en jette. Le script cesse de s'exécuter si une exception n'est pas interceptée correctement? Je cours ce script en arrière-plan pendant plusieurs heures mais ça ne s'arrête jamais. – Krishi