2017-09-06 61 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

您以每秒100次的速度連接到Google的DNS服務器,至少在我的機器上。如果他們偶爾拒絕你的關係,我不會感到驚訝,但我不願意測試這個理論。也許你的機器以這個速度用完了端口?我不知道Windows TCP堆棧如何處理這樣的事情。

嘗試在所有循環中添加睡眠以確保您不會敲擊它們 - 每隔幾秒測試一次連接應該沒問題。

此外,您的原始問題是「爲什麼套接字無法連接?」那麼,趕上例外,並打印,所以你會知道(或大聲說:))

+0

謝謝。我沒有想到我會在谷歌上的負載。至於捕捉異常,我不認爲它是拋出任何。腳本停止運行,如果沒有正確捕獲異常?我在後臺運行這個腳本好幾個小時,但它並沒有停止運行。 – Krishi