Python套接字等待

map*_*l93 5 python sockets pygame

我想知道是否有一种方法可以告诉 python 等待它从服务器获得响应以继续运行。

我正在写一个回合制游戏。我进行了第一步,它将移动发送到服务器,然后将服务器发送到另一台计算机。问题来了。由于不再轮到我,我希望我的游戏等到它得到服务器的响应(等到其他玩家采取行动)。但我的线路:

data=self.sock.recv(1024)
Run Code Online (Sandbox Code Playgroud)

挂起是因为(我认为)它没有立即得到一些东西。所以我想知道如何让它等待某些事情发生然后继续前进。

提前致谢。

A. *_*vis 1

该行sock.recv(1024)会阻塞,直到收到 1024 个字节或操作系统检测到套接字错误。您需要某种方法来了解消息大小——这就是 HTTP 消息包含内容长度的原因。

您可以使用socket.settimeout设置超时,以便在超时之前未到达预期字节数时完全中止读取。

您还可以使用 setblocking(0) 探索 Python 的非阻塞套接字。

  • `.recv` 可能返回少于 `1024` 字节。 (11认同)