网络检查器给出漏报 python
Network checker giving false negatives 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
您正在以每秒大约 100 次的速度连接到 google 的 DNS 服务器,至少在我的机器上是这样。如果他们偶尔拒绝你的联系,我不会感到惊讶,但我不愿意检验这个理论。也许您的机器 运行 端口用完了?我不知道 windows TCP 堆栈如何处理这样的事情。
尝试在您的所有循环中添加睡眠以确保您没有敲打它们 - 每隔几秒测试一次您的连接应该没问题。
此外,您最初的问题是 "Why is the socket failing to connect?" 好吧,捕获异常并打印出来,这样您就知道了(或者大声说出来 :))
此代码能够检测互联网是断开还是连接,并且在我测试过的大部分情况下都能正常工作。问题是有时它说互联网断开连接,然后又说互联网连接。当我浏览网页、观看视频或其他任何东西时,这种情况发生了很多次,关键是我知道互联网在工作。
我知道代码有点乱。是什么导致了这些错误的断开连接?
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
您正在以每秒大约 100 次的速度连接到 google 的 DNS 服务器,至少在我的机器上是这样。如果他们偶尔拒绝你的联系,我不会感到惊讶,但我不愿意检验这个理论。也许您的机器 运行 端口用完了?我不知道 windows TCP 堆栈如何处理这样的事情。
尝试在您的所有循环中添加睡眠以确保您没有敲打它们 - 每隔几秒测试一次您的连接应该没问题。
此外,您最初的问题是 "Why is the socket failing to connect?" 好吧,捕获异常并打印出来,这样您就知道了(或者大声说出来 :))