首页 > 解决方案 > 如何在python中清除存储在套接字中的数据

问题描述

我正在设计一个回合制游戏,它使用 connection.recv() 从套接字读取并将“移动”的数据存储在缓冲区(服务器从中读取)中。问题是,玩家可以在轮到之外发送数据以在套接字缓冲区中排队,这意味着服务器可能会从他们在轮到之外所做的移动中读取,而不是在他们转弯之前阻塞。有什么方法可以刷新存储在套接字中的数据,如果没有,还有其他解决方法吗?

标签: pythonsockets

解决方案


根据 Steffen 的建议,我正在使用 recv 调用来清除缓冲区。目前,我将套接字设置为非阻塞并调用recv,直到出现BlockingIOError。如果有人能指出一个更优雅的解决方案(不使用异常),将不胜感激。

connection.setblocking(False)       
while True:
try:
  chunk = connection.recv(4096)
except BlockingIOError as b:
  break
connection.setblocking(True)

推荐阅读