此代码能够检测互联网是断开连接还是已连接,并且主要在我对其进行测试时起作用。问题是偶尔它会说互联网断开连接,之后就说连接互联网了。在我浏览网页,观看视频或其他任何内容时,这已经发生了很多次,我知道互联网正在发挥作用。
我知道代码有点混乱。导致这些错误断开的原因是什么?
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
答案 0 :(得分:1)
您以每秒约100次的速度连接到谷歌的DNS服务器,至少在我的机器上。如果他们偶尔拒绝你的关系我不会感到惊讶,但我不愿意测试这个理论。也许你的机器以这个速度耗尽了端口?我不知道Windows TCP堆栈将如何处理这样的事情。
尝试在所有循环中添加一个睡眠以确保您不会对它们进行锤击 - 每隔几秒测试一次连接应该没问题。
另外,您的原始问题是"为什么套接字无法连接?"好吧,抓住异常,然后打印,这样你就会知道(或大声说出:))