Python BlockingIOError:[Errno 35]资源暂时不可用[sockets][多线程]
我有一个具有多个客户端的服务器。服务器为每个客户端都有一个单独的线程。这是我在server.py中的线程客户端函数 前面,我打开服务器并运行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
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,“消息已接收!”)
套接字除外。错误:#未收到任何消息
通过
康涅狄格州关闭
Mysend()
函数只使用一个缓冲区,缓冲区的头=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...")