解码从 Python 3.3.5 中的套接字接收的消息时的无限循环



我正在使用这行代码来解码从 Python 中的套接字接收到的字符串,但是当我运行程序时,这一行无限运行,只是在 Python shell 中显示为闪烁的光标:

received = self.sock.recv(16).decode()

如果您知道如何修复它,任何帮助将不胜感激!

它不是在一个无限循环中。它只是阻止 recv 调用,因为没有足够的数据可以读取。您请求读取 16 个字节,recv 将阻止,直到 16 个字节可用 - 而您的套接字还没有 16 个字节。

尝试使用较低的值 - 甚至更好 - 使套接字不阻塞。写入非阻塞套接字读取需要多做一些工作 - 所以如果你确切地知道要读取多少字节,最好给出确切的数字来代替 read()。

如果没有,请在非阻塞套接字上查看此答案。答案有两种不同的方法。

如果超时之前没有收到数据,Python 的 socket.recv() 会为非阻塞套接字返回什么?

最新更新