python 提供了套接字绑定无效参数
python socket bind invalid argument was supplied
我正在处理一个允许我连接到我的客户端应用程序的项目,但是当我断开服务器然后再次托管时,程序会抛出此错误:
[WinError 10022] An invalid argument was supplied
这是由 socket.bind 命令抛出的:
self.Server.bind((str(StrHost),int(IntPort)))
我已经检查过 StrHost 和 IntPort 的值是正确的而且它们没问题。只有当我使用服务器程序断开连接并重新连接时才会发生。
感谢您的帮助。
根据 MIcrosoft,WinError 10022:
Invalid argument. Some invalid argument was supplied (for example, >specifying an invalid level to the setsockopt (Windows Sockets) function). >In some instances, it also refers to the current state of the socket — for >instance, calling accept (Windows Sockets) on a socket that is not listening.
因此,正如 mike.k 所建议的那样,这并不一定意味着提供了无效参数(错误消息可能具有误导性)。
好的,我遇到连接问题的原因是程序卡住等待响应。
这是我用来连接的代码:
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 calls。
像这样:
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() 以防万一它引起问题。我还有发送方法让其他用户知道服务器已断开连接。
如果你愿意,我会 post 我的网络代码在某个地方(可能 github)。
我正在处理一个允许我连接到我的客户端应用程序的项目,但是当我断开服务器然后再次托管时,程序会抛出此错误:
[WinError 10022] An invalid argument was supplied
这是由 socket.bind 命令抛出的:
self.Server.bind((str(StrHost),int(IntPort)))
我已经检查过 StrHost 和 IntPort 的值是正确的而且它们没问题。只有当我使用服务器程序断开连接并重新连接时才会发生。
感谢您的帮助。
根据 MIcrosoft,WinError 10022:
Invalid argument. Some invalid argument was supplied (for example, >specifying an invalid level to the setsockopt (Windows Sockets) function). >In some instances, it also refers to the current state of the socket — for >instance, calling accept (Windows Sockets) on a socket that is not listening.
因此,正如 mike.k 所建议的那样,这并不一定意味着提供了无效参数(错误消息可能具有误导性)。
好的,我遇到连接问题的原因是程序卡住等待响应。 这是我用来连接的代码:
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 calls。 像这样:
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() 以防万一它引起问题。我还有发送方法让其他用户知道服务器已断开连接。
如果你愿意,我会 post 我的网络代码在某个地方(可能 github)。