2017-09-06 3 views
0

このコードは、インターネットが接続されていないか接続されているかどうかを検出することができます。問題は時折、インターネットが切断されていると言い、その後すぐにインターネットに接続していると言います。これは何度も起こっています。私はウェブを閲覧したり、ビデオを見たりしています。私はインターネットが働いていることを知っています。偽のネガティブを与えるネットワークチェッカーpython

私はコードがちょっと混乱していることを知っています。これらの間違った接続の原因は何ですか?

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 

答えて

1

GoogleのDNSサーバーには、少なくとも自分のマシンで、毎秒約100回の割合で接続しています。時にはあなたの接続を拒否すれば私は驚くことはありませんが、私はこの理論をテストするつもりはありません。おそらくあなたのマシンはこの速度で港を使い果たしているでしょうか?私はどのようにWindowsのTCPスタックは、このような何かを処理するか分かりません。

すべてのループにスリープ状態を追加して、あなたがそれらを叩いていないことを確認してください。数秒ごとに接続をテストしても問題ありません。

また、元の質問は「ソケットが接続できないのはなぜですか?」です。さて、例外をキャッチして、あなたが知っているように印刷してください(または大声で言う:))

+0

ありがとう。私は私がgoogleに置くだろう負荷については考えなかった。例外をキャッチすることについては、私はそれが投げているとは思わない。例外が正しく検出されなかった場合、スクリプトは実行を停止しますか?私は何時間もバックグラウンドでこのスクリプトを実行しますが、実行を停止することはありません。 – Krishi

関連する問題