【问题标题】:python socket bind invalid argument was supplied提供了 python 套接字绑定无效参数
【发布时间】:2015-05-16 14:00:26
【问题描述】:

我正在处理一个允许我连接到客户端应用程序的项目,但是当我断开服务器并再次托管时,程序会抛出此错误:

[WinError 10022] An invalid argument was supplied

这是由 socket.bind 命令抛出的:

self.Server.bind((str(StrHost),int(IntPort)))

我已经检查了 StrHost 和 IntPort 的值是否正确,它们都很好。只有当我使用服务器程序断开连接并重新连接时才会发生这种情况。

感谢您的帮助。

【问题讨论】:

  • 断开连接时,是否先在文件句柄上调用.close(),然后再在套接字上调用?
  • @mike.k 是的,我调用了 close() 函数
  • 您介意从断开连接部分发布更多代码吗?我最近遇到了一个类似的问题,但我仍然记忆犹新。
  • 我知道它为什么不起作用,它挂在其中一个命令上,因此它不会执行关闭命令。生病发布答案。

标签: python sockets networking


【解决方案1】:

根据MIcrosoft,WinError 10022:

参数无效。提供了一些无效参数(例如,>为 setsockopt(Windows 套接字)函数指定无效级别)。 >在某些情况下,它还指的是套接字的当前状态——例如,在未侦听的套接字上调用接受(Windows 套接字)。

因此,正如 mike.k 所建议的那样,这并不一定意味着提供了无效的参数(错误消息可能具有误导性)。

【讨论】:

    【解决方案2】:

    好吧,我遇到连接问题的原因是程序在等待响应时卡住了。 这是我用来连接的代码:

    def ConnectS(self,IntPort, StrName,E):
        self.BlnCon = False
        StrHost = socket.gethostname()
        self.StrName = StrName
        try:
            self.Server.bind((str(StrHost),int(IntPort)))
        except Exception as Error:
            print(Error)
        self.Connect = socket.socket()
        self.Server.listen(1)
        self.Connect, addr = self.Server.accept()
        self.BlnCon = True
        while self.BlnCon:
            self.RecvMsg(E)
        self.BlnCon = False
        self.Connect.close()
        self.Server.close()
    

    如果服务器断开连接,则函数 RecvMsg() 仍将运行。 解决此问题的方法是将 close 方法放在单独的方法中。 所以你会有一个 Disconnect 函数,它只会运行 2 个 close 调用。 像这样:

    def Handler(Btn,E,IntZ):
        E.Networking.SendMsg('Exit',E)
        E.Networking.Connect.close()
        E.Networking.Server.close()
        E.Networking.Connect = socket.socket()
        E.Networking.Server = socket.socket()
    

    在我的代码中需要注意的一点是我刚刚将它添加到按钮处理程序中。我不确定,但我只是将我的两个变量都设置为 socket.socket() 以防万一它引起问题。我也有 send 方法让其他用户知道服务器已断开连接。

    如果你愿意,我会将我的网络代码发布到某个地方(可能是 github)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 2019-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      相关资源
      最近更新 更多