提供了python socket bind无效参数

时间:2015-05-16 14:00:27

标签: python sockets networking

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

[WinError 10022] An invalid argument was supplied

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

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

我已经检查过StrHost和IntPort是正确的值,它们没问题。它只在我使用服务器程序断开连接并重新连接时才会发生。

谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

根据MIcrosoft,WinError 10022:

  

无效的参数。提供了一些无效参数(例如,> gt;指定setsockopt(Windows套接字)函数的无效级别)。 >在某些情况下,它还引用套接字的当前状态 - 对于>实例,在未侦听的套接字上调用accept(Windows套接字)。

正如mike.k建议的那样,它并不一定意味着提供了无效的参数(错误消息可能会产生误导)。

答案 1 :(得分:0)

好吧,我之所以遇到连接问题是因为程序卡在等待响应。 继承人我用来连接的代码:

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方法。 所以你将有一个断开连接功能,它将只运行2次关闭调用。 像这样:

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)。