网络检查员给出假阴性python

时间:2017-09-06 19:26:22

标签: python windows python-3.x win32com

此代码能够检测互联网是断开连接还是已连接,并且主要在我对其进行测试时起作用。问题是偶尔它会说互联网断开连接,之后就说连接互联网了。在我浏览网页,观看视频或其他任何内容时,这已经发生了很多次,我知道互联网正在发挥作用。

我知道代码有点混乱。导致这些错误断开的原因是什么?

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 个答案:

答案 0 :(得分:1)

您以每秒约100次的速度连接到谷歌的DNS服务器,至少在我的机器上。如果他们偶尔拒绝你的关系我不会感到惊讶,但我不愿意测试这个理论。也许你的机器以这个速度耗尽了端口?我不知道Windows TCP堆栈将如何处理这样的事情。

尝试在所有循环中添加一个睡眠以确保您不会对它们进行锤击 - 每隔几秒测试一次连接应该没问题。

另外,您的原始问题是"为什么套接字无法连接?"好吧,抓住异常,然后打印,这样你就会知道(或大声说出:))