python套接字阻止recv挂起?

2024-05-15 03:54:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用sockets在pygame中创建一个两人游戏,问题是,当我尝试在这条线上接收数据时:

message = self.conn.recv(1024)

python将挂起,直到它获得一些数据。问题在于,当客户端没有通过套接字发送任何内容并导致黑屏时,会暂停游戏循环。我怎样才能阻止recv这么做?

提前谢谢


Tags: 数据self游戏客户端内容messageconnpygame
2条回答

您可以使用信号模块来停止挂起的recv线程。

在接收线程中:

try:
    data = sock.recv(1024)
except KeyboardInterrupt:
    pass

在解释线程中:

signal.pthread_kill(your_recving_thread.ident, signal.SIGINT)

使用非阻塞模式。(见^{}。)

或者在调用recv之前检查是否有可用的数据。 例如,使用^{}

r, _, _ = select.select([self.conn], [], [])
if r:
    # ready to receive
    message = self.conn.recv(1024)

相关问题 更多 >

    热门问题