在使用Python的套接字模块创建客户端时,我遇到OSError: [WinError 10022] An invalid argument was supplied
,我对其原因和如何管理感到困惑。
关于它的价值,我使用的是Windows 10。
简而言之,目标代码围绕连接过程进行:
import socket
client = socket.socket()
hostname = socket.gethostname()
port = 50007
while (True):
client.settimeout(0.1)
try:
client.connect((hostname, port))
except socket.timeout:
print("timeout")
continue
else:
. . .
哪个返回:
timeout
Traceback (most recent call last):
File "C:/testClient.py", line 12, in <module>
client.connect((hostname, port))
OSError: [WinError 10022] An invalid argument was supplied
诚然,仅在引入超时内容后才出现此错误。如输出所示,它成功超时一次,但第二次重试失败。
在超时后,我已经检查了hostName
和port
变量,但是它们没有变化(应该不变)。
我使系统处于超时循环的唯一原因是因为我还将tkinter模块用于用户界面,并且我希望UI不断更新,以便程序不会停止响应。我只想让连接在超时时重试。
我在做什么错了?
答案 0 :(得分:0)
您要在相同套接字对象上触发connect()
太快(请不要问内部问题,但是套接字还没有准备好重新连接)。 / p>
至少有两种方法可以解决此问题:
import socket
import time
address = (socket.gethostname(), 50007)
client = socket.socket()
client.settimeout(0.1)
while (True):
try:
client.connect(address)
except socket.timeout:
print("timeout")
time.sleep(1)
import socket
address = (socket.gethostname(), 50007)
while (True):
client = socket.socket()
client.settimeout(0.1)
try:
client.connect(address)
except socket.timeout:
print("timeout")
connect_ex()
import socket
address = (socket.gethostname(), 50007)
client = socket.socket()
client.settimeout(0.1)
while (True):
res = client.connect_ex(address)
if(res != 0):
print("Error / timeout", res)
尽管选项3与您初次尝试并仅捕获所有异常,而不仅仅是socket.timeout
相同。