gpt4 book ai didi

Python套接字.connect() "An invalid argument was supplied"(OSError : [WinError 10022])

转载 作者:行者123 更新时间:2023-12-01 08:23:46 26 4
gpt4 key购买 nike

在使用Python的socket模块创建客户端时,我遇到了OSError: [WinError 10022] An invalid argument wasprovided,我对它的原因以及如何管理它感到困惑。

无论如何,我使用的是 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

诚然,这个错误只有在引入超时内容后才会出现。如输出所示,一次成功超时,但第二次重试失败。

我在超时后检查了 hostNameport 变量,但是它们并没有改变(因为它们不应该改变)。

我让系统陷入超时循环的唯一原因是因为我还使用 tkinter 模块作为用户界面,并且我希望 UI 不断更新,以便程序不会停止响应。我想要的只是连接超时时重试。

我做错了什么?

最佳答案

您在同一个套接字对象上触发connect()的速度太快(请不要询问内部结构,但套接字还没有准备好重新启动)尚未连接)。

至少有 2 个选项可以解决此问题:

选项 1 - 在尝试之间休眠

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)

选项 2 - 为每次尝试创建一个新套接字

import socket

address = (socket.gethostname(), 50007)

while (True):
client = socket.socket()
client.settimeout(0.1)
try:
client.connect(address)
except socket.timeout:
print("timeout")

选项 3 - 使用 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

关于Python套接字.connect() "An invalid argument was supplied"(OSError : [WinError 10022]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54437148/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com