Python BlockingIOError:[Errno 35]资源暂时不可用[sockets][多线程]

Python BlockingIOError:[Errno 35]资源暂时不可用[sockets][多线程],python,sockets,networking,Python,Sockets,Networking,我有一个具有多个客户端的服务器。服务器为每个客户端都有一个单独的线程。这是我在server.py中的线程客户端函数 前面,我打开服务器并运行s.accept()来接受客户端,但由于我不想让它阻止我的程序,我设置了s.setblocking(0) def线程化_客户端(conn、addr、clientID): clientUsernameLength=int(conn.recv(头).decode(格式)) clientUsername=pickle.load(conn.recv(clientUs

我有一个具有多个客户端的服务器。服务器为每个客户端都有一个单独的线程。这是我在server.py中的线程客户端函数 前面,我打开服务器并运行
s.accept()
来接受客户端,但由于我不想让它阻止我的程序,我设置了
s.setblocking(0)

def线程化_客户端(conn、addr、clientID):
clientUsernameLength=int(conn.recv(头).decode(格式))
clientUsername=pickle.load(conn.recv(clientUsernameLength))
打印(f“{clientUsername}已加入!”)
#将此播放机添加到播放机词典
**clientDataLength=int(conn.recv(头).decode(格式))**
clientDataDict=pickle.load(conn.recv(clientDataLength))
玩家[clientUsername]=clientDataDict
发送(conn,f“感谢加入我们,{clientUsername}!”)
已连接=真
连接时:#在客户端仍连接时继续运行
try:#检查服务器是否收到来自玩家的消息
clientMessageLength=conn.recv(头)。解码(格式)
如果clientMessageLength:
clientMessageLength=int(clientMessageLength)
clientMessage=pickle.load(conn.recv(clientMessageLength))
打印(f“[Client{clientID}][{clientMessage}]”)
如果clientMessage==断开\u消息:
打印(f“客户端{clientID}已断开连接”)
发送(康涅狄格州,“感谢加入我们!”)
已连接=错误
其他:
发送(conn,“消息已接收!”)
套接字除外。错误:#未收到任何消息
通过
康涅狄格州关闭
My
send()
函数只使用一个缓冲区,缓冲区的
头=64
,并且
FORMAT=“utf-8”

在客户端,我首先发送用户名,然后发送字典

dataDict = {"score": score, "health": 10, "items": ["shield", "mirror"]}
while True:
    try:
        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        client.connect(ADDR)
        send(username)
        send(dataDict)
        break
    except ConnectionRefusedError:
        print("Waiting for server...")
但是,clientDataLength=int(conn.recv(HEADER).decode(FORMAT))遇到错误:

线程1中的异常: 回溯(最近一次呼叫最后一次): 文件“/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/threading.py”,第932行,在bootstrap\u-inner中 self.run() 文件“/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/threading.py”,第870行,正在运行 自我目标(*自我参数,**自我参数) 文件”,第127行,在线程化的\u客户端中 clientDataLength=conn.recv(头)。解码(格式) BlockingIOError:[Errno 35]资源暂时不可用 为什么会这样

dataDict = {"score": score, "health": 10, "items": ["shield", "mirror"]}
while True:
    try:
        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        client.connect(ADDR)
        send(username)
        send(dataDict)
        break
    except ConnectionRefusedError:
        print("Waiting for server...")